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

由于时区缩写没有很好的标准化,因此 PostgreSQL 提供了一种自定义服务器接受的缩写集的方法。 timezone_abbreviations运行时参数确定有效的缩写集。尽管任何数据库用户都可以更改此参数,但是其可能的值在数据库 Management 员的控制下-实际上,它们是存储在安装目录.../share/timezonesets/中的配置文件的名称。通过在该目录中添加或更改文件,Management 员可以为时区缩写设置本地策略。

如果文件名完全按字母 Sequences 排列,则可以将timezone_abbreviations设置为在.../share/timezonesets/中找到的任何文件名。 (禁止timezone_abbreviations中的非字母字符,禁止读取预期目录之外的文件,以及读取编辑器备份文件和其他无关的文件.)

时区缩写文件可以包含空行和以#开头的 Comments。非 Comments 行必须具有以下格式之一:

zone_abbreviation offset
zone_abbreviation offset D
zone_abbreviation time_zone_name
@INCLUDE file_name
@OVERRIDE
  • zone_abbreviation *只是所定义的缩写。 * offset *是一个整数,给出距 UTC 的等效偏移量(以秒为单位),正数表示 Greenwich 的东移,负数表示西移。例如,-18000 在 Greenwich 以西五个小时,即北美东部海岸标准时间。 D表示区域名称代表本地夏令时而不是标准时间。

或者,可以提供* time_zone_name *,以引用 IANA 时区数据库中定义的时区名称。请参考区域的定义,以查看该区域中是否使用了该缩写,如果使用了该缩写,则使用适当的含义,即正在确定其值的时间戳上当前使用的含义,或者如果当时不是最新的,则使用之前的含义;如果仅在那个时候之后使用,则使用最早的含义。此行为对于处理含义在历史上有所不同的缩写必不可少。还可以根据区域名称定义缩写,在该区域中不出现该缩写;那么使用缩写等同于写出区域名称。

Tip

在定义一个从 UTC 的偏移量从未改变过的缩写时,首选使用一个简单的整数* offset *,因为与需要查询时区定义的缩写相比,这种缩写的处理成本要低得多。

@INCLUDE语法允许在.../share/timezonesets/目录中包含另一个文件。可以将包含内容嵌套到有限的深度。

@OVERRIDE语法指示文件中的后续条目可以覆盖先前的条目(通常是从包含的文件中获取的条目)。如果不这样做,则相同时区缩写的冲突定义将被视为错误。

在未经修改的安装中,文件Default包含世界上大多数国家/地区的所有非冲突时区缩写。为这些区域提供了其他文件AustraliaIndia:这些文件首先包含Default文件,然后根据需要添加或修改缩写。

出于参考目的,标准安装还包含文件Africa.txtAmerica.txt等,其中包含有关 IANA 时区数据库已知正在使用的每个时区缩写的信息。这些文件中找到的区域名称定义可以根据需要复制并粘贴到自定义配置文件中。请注意,由于这些文件的名称中嵌入了点,因此无法将它们直接称为timezone_abbreviations设置。

Note

如果在读取时区缩写集时发生错误,则不会应用新值,而保留旧集。如果启动数据库时发生错误,则启动失败。

Caution

配置文件中定义的时区缩写会覆盖 PostgreSQL 内置的非时区含义。例如,Australia配置文件定义SAT(用于南澳大利亚标准时间)。当此文件处于活动状态时,SAT将不会被识别为星期六的缩写。

Caution

如果您修改.../share/timezonesets/中的文件,则要由您来进行备份-普通的数据库转储将不包含此目录。