一些时区缩写并不很标准,PostgreSQL 使用 timezone_abbreviations 运行时配置参数定义服务器可识别的时区缩写集合。该配置参数可以被任何数据库用户更改,但是其取值范围只能由数据库管理员更改,事实上可用的值都是 .../share/timezonesets/ 目录中的文件名。通过添加或修改其中的文件,管理员就可以控制可用的时区缩写。
timezone_abbreviations 可以被设为 .../share/timezonesets/ 目录下的任意文件名(文件名只允许包含字母)。禁止在 timezone_abbreviations 中使用非字母字符是为了防止读取目录之外的文件以及其它不该读取的文件。
时区缩写文件中可以包含空白行和以 # 开头的注释。非注释行必须是以下格式:
time_zone_name offset time_zone_name offset D @INCLUDE file_name @OVERRIDE
time_zone_name 是被定义的缩写名。offset 是该时区相对于 UTC 偏移量(以秒计),向东为正,向西为负。例如 -18000 表示在格林威治以西 5 小时,也就是美国东部标准时间。D 表示该时区使用夏令时而不是标准时。因为目前所有已知的时区偏移量都以 15 分钟为单位,因此偏移量的秒数必须是 900 的倍数。
@INCLUDE 语法用于包含 .../share/timezonesets/ 目录中的其它文件,可以嵌套包含,不过并不允许无限深度的嵌套。
@OVERRIDE 语法表示后面项的定义可以覆盖前面的项,否则重复定义将导致错误。
默认安装时,Default 包含世界上几乎所有不冲突的时区缩写。额外的 Australia 和 India 文件用于这些区域:这些文件首先被包含在 Default 文件中并在随后按需修改或者添加时区。
为了便于参考,标准安装也包含了 Africa.txt, America.txt 等文件,它们包含了所有 zic 时区数据库中的时区缩写。这些文件中的时区名定义可以复制到自定义的配置文件中。需要注意的是,这些文件名不能直接用于 timezone_abbreviations ,因为这些文件名中包含句点。
【注意】如果在读取时区数据集时出错,将不会应用任何新值,仍将使用旧的数据集。如果这个错误是在数据库服务器启动时发生的,那么启动将失败。
警告 |
配置文件中的时区缩写定义将会覆盖 PostgreSQL 内置的非时区含义。例如 Australia 配置文件定义了 SAT(南澳洲标准时间),如果激活了该文件,那么 SAT 将不会被识别为星期六的缩写。 |
警告 |
如果你修改 .../share/timezonesets/ 中的文件,那么你必须自己手动备份,因为数据库转储不会包含这个目录的内容。 |