B.3. 日期/时间配置文件

一些时区缩写并不很标准,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文件包含世界上几乎所有不冲突的时区缩写。 另外,AustraliaIndia文件用于这些区域: 这些文件首先被包含在Default文件中并在随后按需修改或者添加时区。

为了便于参考,标准安装也包含了Africa.txt, America.txt等文件, 它们包含了所有zoneinfo时区数据库中的时区缩写。 这些文件中的时区名定义可以复制到自定义的配置文件中。 需要注意的是,这些文件名不能直接用于timezone_abbreviations , 因为这些文件名中包含句点。

注意: 如果在读取时区数据集时出错, 将不会应用任何新值,仍将使用旧的数据集。 如果这个错误是在数据库服务器启动时发生的,那么启动将失败。

小心

配置文件中的时区缩写定义将会覆盖PostgreSQL内置的非时区含义。 例如Australia配置文件定义了SAT(南澳洲标准时间), 如果激活了该文件,那么SAT将不会被识别为星期六的缩写。

小心

如果你修改.../share/timezonesets/中的文件, 那么你必须自己手动备份,因为数据库转储不会包含这个目录的内容。