↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / 数据类型 / 日期与时间

timestamp with time zone

日期和时间,包含时区

当前查看 PostgreSQL 18.6。

PG10–20 核心源码清单。类型转换与操作符类列出源码显式声明的关系;缺少记录不能排除通过其他机制进行转换或使用索引。

定义

SQL 名称与别名: timestamptz

日期和时间,包含时区

timestamp [ ( p ) ] with time zone
目录名称
pg_catalog.timestamptz
类型 OID
1184
类型种类
基础类型
声明长度
8 字节
存储策略
plain
输入函数
timestamptz_in
输出函数
timestamptz_out
手册中的声明
timestamp [ ( p ) ] with time zone
存储大小
8 字节
手册说明
包括日期和时间,有时区
下限
公元前 4713 年
上限
公元 294276 年
精度
1 微秒

中文手册

阅读完整手册章节

阅读来源定义

8.5. 日期/时间类型

PostgreSQL 支持完整的一组 SQL 日期和时间类型,如表 8.9所示。这些数据类型上可用的操作见第 9.9 节。日期按格里高利历计算,即使是在该历法启用之前的年份也是如此(更多信息见第 B.6 节)。

表 8.9. 日期/时间类型

名字 存储大小 说明 下限 上限 精度
timestamp [ (p) ] [ without time zone ] 8 字节 包括日期和时间(无时区) 公元前 4713 年 公元 294276 年 1 微秒
timestamp [ (p) ] with time zone 8 字节 包括日期和时间,有时区 公元前 4713 年 公元 294276 年 1 微秒
date 4 字节 日期(没有一天中的时间) 公元前 4713 年 公元 5874897 年 1 天
time [ (p) ] [ without time zone ] 8 字节 一天中的时间(无日期) 00:00:00 24:00:00 1 微秒
time [ (p) ] with time zone 12 字节 一天中的时间(无日期),带时区 00:00:00+1559 24:00:00-1559 1 微秒
interval [ fields ] [ (p) ] 16 字节 时间间隔 -178000000 年 178000000 年 1 微秒

注意

SQL 标准要求仅写 timestamp 时,应等效于 timestamp without time zone,而 PostgreSQL 也遵循这种行为。timestamptz 被接受为 timestamp with time zone 的简写,这是 PostgreSQL 的扩展。

time, timestamp, and interval accept an optional precision value p which specifies the number of fractional digits retained in the seconds field. By default, there is no explicit bound on precision. The allowed range of p is from 0 to 6.

interval 类型还有一个附加选项,可以通过写出下面这些短语之一来限制所存储字段的集合:

YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
YEAR TO MONTH
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOUR TO MINUTE
HOUR TO SECOND
MINUTE TO SECOND

注意,如果同时指定了 fields 和 p,那么 fields 必须包含 SECOND,因为精度只作用于秒。

time with time zone 类型由 SQL 标准定义,但其定义具有一些会让人怀疑其实用性的特性。在大多数情况下,date、time、timestamp without time zone 和 timestamp with time zone 的组合,就足以提供任何应用所需的完整日期/时间功能。

日期和时间输入几乎可以使用任何合理格式,包括 ISO 8601、SQL 兼容格式、传统 POSTGRES 格式及其他格式。某些格式中的日、月、年排列顺序存在歧义,因此支持指定这些字段的预期顺序。将 DateStyle 参数设为 MDY 可按月-日-年解释,设为 DMY 可按日-月-年解释,设为 YMD 可按年-月-日解释。

PostgreSQL 在处理日期/时间输入方面,比 SQL 标准要求的更灵活。有关日期/时间输入的精确解析规则,以及可识别的文本字段(包括月份、星期几和时区),请参见附录 B。

请记住,任何日期或时间字面值输入都必须像文本字符串一样用单引号括起来。更多信息请参见第 4.1.2.7 节。SQL 要求使用下列语法:

type [ (p) ] 'value'

其中,p 是可选的精度说明,给出秒字段的小数位数。time、timestamp 和 interval 类型可以指定精度,范围为 0 至 6。如果常量写法中未指定精度,则默认采用字面值的精度(但不超过 6 位)。

8.5.1.1. 日期

表 8.10显示了date类型可能的输入方式。

表 8.10. 日期输入

示例 说明
1999-01-08 ISO 8601;在任何模式下均为 1 月 8 日(推荐格式)
1999 年 1 月 8 日 在任何datestyle输入模式下都无歧义
1/8/1999 在 MDY 模式下为 1 月 8 日;在 DMY 模式下为 8 月 1 日
1/18/1999 在 MDY 模式下为 1 月 18 日;其他模式下不接受
01/02/03 在 MDY 模式下为 2003 年 1 月 2 日;在 DMY 模式下为 2003 年 2 月 1 日;在 YMD 模式下为 2001 年 2 月 3 日
1999-Jan-08 在任何模式下均为 1 月 8 日
Jan-08-1999 在任何模式下均为 1 月 8 日
08-Jan-1999 在任何模式下均为 1 月 8 日
99-Jan-08 在 YMD 模式下为 1 月 8 日,否则报错
08-Jan-99 1 月 8 日,但在 YMD 模式下报错
Jan-08-99 1 月 8 日,但在 YMD 模式下报错
19990108 ISO 8601;在任何模式下均为 1999 年 1 月 8 日
990108 ISO 8601;在任何模式下均为 1999 年 1 月 8 日
1999.008 年和一年中的第几天
J2451187 儒略日
公元前 99 年 1 月 8 日 公元前 99 年

8.5.1.2. 时间

一天中的时间类型包括 time [ (p) ] without time zone 和 time [ (p) ] with time zone。单独写 time 等效于 time without time zone。

这些类型的有效输入由一个一天中的时间,加上一个可选时区组成(见表 8.11和表 8.12)。如果在 time without time zone 的输入中指定了时区,它会被静默忽略。你也可以指定一个日期,但它同样会被忽略,除非你使用了涉及夏令时规则的时区名称,例如 America/New_York。在这种情况下,必须指定日期,以便确定应适用标准时间还是夏令时。相应的时区偏移会被记录到 time with time zone 值中,并按存储时的样子输出;它不会根据当前活动时区进行调整。

表 8.11. 时间输入

示例 说明
04:05:06.789 ISO 8601
04:05:06 ISO 8601
04:05 ISO 8601
040506 ISO 8601
04:05 AM 与 04:05 相同;AM 不影响值
04:05 PM 与 16:05 相同;输入的小时必须 <= 12
04:05:06.789-8 ISO 8601,时区以 UTC 偏移表示
04:05:06-08:00 ISO 8601,时区以 UTC 偏移表示
04:05-08:00 ISO 8601,时区以 UTC 偏移表示
040506-08 ISO 8601,时区以 UTC 偏移表示
040506+0730 ISO 8601,时区的 UTC 偏移不是整小时
040506+07:30:00 精确到秒的 UTC 偏移量(ISO 8601 不允许)
04:05:06 PST 缩写指定的时区
2003-04-12 04:05:06 America/New_York 全名指定的时区

表 8.12. 时区输入

示例 说明
PST 缩写(太平洋标准时间)
America/New_York 完整时区名
PST8PDT POSIX风格的时区声明
-8:00:00 PST的UTC偏移
-8:00 PST 的 UTC 偏移量(ISO 8601 扩展格式)
-800 PST 的 UTC 偏移量(ISO 8601 基本格式)
-8 PST 的 UTC 偏移量(ISO 8601 基本格式)
zulu UTC的军方缩写
z zulu 的简写形式(也见于 ISO 8601)

关于如何指定时区,参见第 8.5.3 节。

8.5.1.3. 时间戳

时间戳类型的有效输入由一个日期和时间的串接组成,后面跟着一个可选时区,以及一个可选的 AD 或 BC(另外,AD/BC 也可以出现在时区前面,但这种顺序并不推荐)。因此:

1999-01-08 04:05:06

和:

1999-01-08 04:05:06 -8:00

都是遵循 ISO 8601 标准的有效值。另外,广泛使用的下列格式:

January 8 04:05:06 1999 PST

也被支持。

按照SQL标准,timestamp without time zone和timestamp with time zone字面量的区别在于,时间后是否有“+”或“-”符号及其后的时区偏移。因此,按照该标准,

TIMESTAMP '2004-10-19 10:23:54'

是timestamp without time zone,而

TIMESTAMP '2004-10-19 10:23:54+02'

是timestamp with time zone。PostgreSQL在确定字符串字面量的类型之前,从不检查其内容,因此会把上述两者都视为timestamp without time zone。为确保字面量被视为timestamp with time zone,应为它显式指定正确类型:

TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02'

对于已经确定为 timestamp without time zone 的值,PostgreSQL 会静默忽略任何时区指示。也就是说,结果值直接取自输入字符串中的日期/时间字段,而不会因时区而调整。

对于 timestamp with time zone 值,如果输入字符串中包含显式时区,则会使用该时区对应的偏移将其转换为协调世界时(UTC)。如果输入字符串中没有给出时区,则假定它位于系统TimeZone参数指定的时区,并使用 timezone 时区的偏移将其转换为 UTC。无论哪种情况,该值在内部都以 UTC 存储,原先声明或假定的时区都不会被保留。

当输出一个 timestamp with time zone 值时,它总会从 UTC 转换到当前 timezone 时区,并显示为该时区的本地时间。若要查看其他时区的时间,可以修改 timezone,或者使用 AT TIME ZONE 构造(见第 9.9.4 节)。

在 timestamp without time zone 和 timestamp with time zone 之间转换时,通常假定 timestamp without time zone 值应被解释为,或输出为,timezone 本地时间。要为该转换指定不同的时区,可以使用 AT TIME ZONE。

8.5.1.4. 特殊值

为了方便起见,PostgreSQL 支持若干特殊的日期/时间输入值,如表 8.13所示。infinity 和 -infinity 在系统内部有特殊表示,并且输出时会保持不变;其余值则只是记法上的简写,在读取时会被转换成普通日期/时间值。(特别是,now 及相关字符串在被读取后会立刻转换成某个特定的时间值。)这些值在 SQL 命令中作为常量使用时,都必须用单引号括起来。

表 8.13. 特殊日期/时间输入

输入串 合法类型 说明
epoch date, timestamp 1970-01-01 00:00:00+00(Unix系统时间0)
无穷大 date, timestamp, interval 晚于所有其他时间戳
-infinity date, timestamp, interval 早于所有其他时间戳
now date, time, timestamp 当前事务的开始时间
today date, timestamp 今天午夜(00:00)
tomorrow date, timestamp 明天午夜(00:00)
yesterday date, timestamp 昨天午夜(00:00)
allballs time 00:00:00.00 UTC

以下兼容 SQL 的函数也可获取相应数据类型的当前时间值:CURRENT_DATE、CURRENT_TIME、CURRENT_TIMESTAMP、LOCALTIME、LOCALTIMESTAMP,见第 9.9.5 节。它们是 SQL 函数,不会在数据输入字符串中被识别。

小心

虽然输入字符串 now、today、tomorrow 和 yesterday 可用于交互式 SQL 命令,但当命令被保存以便稍后执行时,例如在预备语句、视图和函数定义中,它们的行为可能令人意外。这些字符串可能在读取时就被转换成某个具体时间值,而该值即使后来已经过时,也会继续被使用。在这类上下文中,应改用某个 SQL 函数。例如,CURRENT_DATE + 1 比 'tomorrow'::date 更安全。

日期/时间类型的输出格式可以设为四种样式之一:ISO 8601、SQL(Ingres)、传统的 POSTGRES(Unix date 格式)或 German。默认是 ISO 格式。(SQL 标准要求使用 ISO 8601 格式。该输出格式之所以名为“SQL”,纯属历史偶然。)表 8.14展示了各种输出样式的示例。date 和 time 类型的输出通常只包含示例中的日期部分或时间部分。不过,POSTGRES 样式对纯日期值仍会采用 ISO 格式输出。

表 8.14. 日期/时间输出风格

风格设置 说明 示例
ISO ISO 8601,SQL 标准 1997-12-17 07:37:16-08
SQL 传统样式 12/17/1997 07:37:16.00 PST
Postgres 原始样式 Wed Dec 17 07:37:16 1997 PST
German 地区样式 17.12.1997 07:37:16.00 PST

注意

ISO 8601 specifies the use of uppercase letter T to separate the date and time. PostgreSQL accepts that format on input, but on output it uses a space rather than T, as shown above. This is for readability and for consistency with RFC 3339 as well as some other database systems.

SQL和POSTGRES风格中,如果指定了 DMY 字段顺序,“日”将出现在“月”之前,否则“月”出现在“日”之前(有关该设置如何影响输入值的解释,请参考第 8.5.1 节)。表 8.15给出了示例。

表 8.15. 日期顺序习惯

datestyle设置 输入顺序 示例输出
SQL, DMY 日 / 月 / 年 17/12/1997 15:37:16.00 CET
SQL, MDY 月 / 日 / 年 12/17/1997 07:37:16.00 PST
Postgres, DMY 日 / 月 / 年 Wed 17 Dec 07:37:16 1997 PST

在 ISO 样式中,时区总是显示为相对于 UTC 的有符号数字偏移,格林尼治以东的时区使用正号。如果偏移是整小时,就显示为 hh;如果是整分钟,则显示为 hh:mm;否则显示为 hh:mm:ss。(第三种情况在任何现代时区标准下都不可能出现,但在处理标准化时区被采用之前的时间戳时可能会看到。)在其他日期样式中,如果当前时区有通用的字母缩写,就会显示该缩写;否则会以 ISO 8601 基本格式的有符号数字偏移显示(hh 或 hhmm)。这些样式中显示的字母缩写,取自当前由TimeZone运行时参数选中的 IANA 时区数据库条目;它们不受timezone_abbreviations设置影响。

用户可以通过 SET datestyle 命令、postgresql.conf 配置文件中的DateStyle参数,或者服务器端或客户端上的 PGDATESTYLE 环境变量来选择日期/时间样式。

格式化函数to_char(见第 9.8 节)也可以作为一个更灵活的方式来格式化日期/时间输出。

时区及其惯例不仅由地理位置决定,也受政治决策影响。世界各地的时区在 20 世纪逐渐得到一定程度的标准化,但仍可能随意变更,尤其是夏令时规则。PostgreSQL 使用广泛应用的 IANA(Olson)时区数据库记录历史时区规则。对于未来时间,假定某个时区最新已知的规则将一直沿用下去。

PostgreSQL 努力在典型用法上与 SQL 标准定义保持兼容。不过,SQL 标准在日期和时间类型及其能力方面存在一些奇怪的混搭。两个显而易见的问题是:

  • 尽管 date 类型不能有关联的时区,time 类型却可以。但现实世界中的时区如果不同时关联日期和时间,几乎没有意义,因为偏移量可能会随着夏令时切换而在一年中发生变化。

  • 默认时区以相对于 UTC 的固定数值偏移量指定,因此跨越夏令时切换边界进行日期/时间运算时,无法自动适应夏令时。

为了克服这些困难,我们建议在使用时区时采用同时包含日期和时间的日期/时间类型。我们不建议使用 time with time zone 类型(尽管 PostgreSQL 出于兼容旧应用以及遵循 SQL 标准的考虑而支持它)。PostgreSQL 对于任何只包含日期或时间的类型,都会假定其使用本地时区。

所有带时区的日期和时间都在内部以 UTC 存储。显示给客户端之前,它们会转换为 TimeZone 配置参数指定时区的本地时间。

PostgreSQL 允许使用三种不同形式来指定时区:

  • 完整时区名称,例如 America/New_York。识别到的时区名称列在 pg_timezone_names 视图中(见第 53.34 节)。PostgreSQL 为此使用广泛采用的 IANA 时区数据,因此同样的时区名称通常也会被其他软件识别。

  • 时区缩写,例如 PST。与完整时区名称不同,这种指定方式只定义了一个特定的 UTC 偏移,而完整时区名称还可能隐含一套夏令时切换规则。识别到的缩写列在 pg_timezone_abbrevs 视图中(见第 53.33 节)。你不能把TimeZone或log_timezone配置参数设置为时区缩写,但可以在日期/时间输入值中以及与 AT TIME ZONE 操作符一起使用缩写。

  • 除了时区名称和缩写之外,PostgreSQL 还接受 POSIX 风格的时区说明,见第 B.5 节。这个选项通常不如使用具名时区更合适,但如果没有合适的 IANA 时区条目可用,它可能就是必需的。

简而言之,这就是缩写和全名的区别:缩写表示某个特定的 UTC 偏移,而很多完整名称隐含了当地的夏令时规则,因此可能对应两个不同的 UTC 偏移。例如,2014-06-04 12:00 America/New_York 表示纽约当地时间中午;在这个具体日期,它属于东部夏令时(UTC-4),所以 2014-06-04 12:00 EDT 指定的是同一个时刻。但 2014-06-04 12:00 EST 指定的是东部标准时中午(UTC-5),无论当天名义上是否正在实行夏令时。

注意

POSIX 风格时区指定中的正负号,与 ISO-8601 日期时间值中的正负号含义相反。例如,2014-06-04 12:00+04 对应的 POSIX 时区是 UTC-4。

更复杂的是,一些司法辖区在不同时间使用同一时区缩写来表示不同的 UTC 偏移;例如在莫斯科,MSK 在某些年份表示 UTC+3,在另一些年份则表示 UTC+4。PostgreSQL 会按照该缩写在所给日期上的含义(或最近一次的含义)来解释这类缩写;但与上面的 EST 例子一样,这并不一定等同于该日期的当地民用时间。

无论哪种形式,时区名称及其缩写都不区分大小写。(这是对 PostgreSQL 8.2 之前版本的一项改动;在那些版本中,时区名在某些环境下区分大小写,而在另一些环境下则不区分。)

时区名称和缩写并不是硬编码在服务器中的;它们来自安装目录下 .../share/timezone/ 和 .../share/timezonesets/ 子目录中的配置文件(见第 B.4 节)。

TimeZone配置参数可以在 postgresql.conf 文件中设置,也可以通过第 19 章中说明的其他标准方式设置。另外,还有一些特殊的设置方法:

  • SQL 命令 SET TIME ZONE 用于设置会话的时区。它是 SET TIMEZONE TO 的另一种写法,语法上更符合 SQL 规范。

  • PGTZ 环境变量会被 libpq 客户端用于在连接到服务器时发送一条 SET TIME ZONE 命令。

interval值可以使用下列详细语法书写:

[@] quantity unit [quantity unit...] [direction]

其中quantity是一个数字(可以带有符号);unit是microsecond、millisecond、second、minute、hour、day、week、month、year、decade、century、millennium 或它们的缩写或复数形式;direction 可以是 ago 或为空。at 符号(@)只是可选的噪声。不同单位的数量会按适当的符号规则隐式相加。ago 会将所有字段取反。如果IntervalStyle被设置为 postgres_verbose,该语法也会用于间隔输出。

日、小时、分钟和秒的数量也可以不写显式单位标记。例如,'1 12:59:10' 会被读作 '1 day 12 hours 59 min 10 sec'。同样,年和月的组合也可以用一个连字符表示,例如 '200-10' 会被读作 '200 years 10 months'。(事实上,这些较短形式正是 SQL 标准唯一允许的形式,并且在 IntervalStyle 被设置为 sql_standard 时也用于输出。)

间隔值也可以写成 ISO 8601 时间间隔,使用标准第 4.4.3.2 节的“带标志符的格式”,或第 4.4.3.3 节的“替代格式”。带标志符的格式如下:

P quantity unit [ quantity unit ...] [ T [ quantity unit ...]]

字符串必须以 P 开头,并且可以包含一个 T 来引出一天中的时间单位。可用的单位缩写见表 8.16。单位可以省略,也可以按任意顺序出现,但小于一天的单位必须出现在 T 之后。特别是,M 的含义取决于它是在 T 之前还是之后。

表 8.16. ISO 8601 间隔单位缩写

缩写 含义
Y 年
M 月(在日期部分中)
W 周
D 日
H 小时
M 分钟(在时间部分中)
S 秒

如果使用替代格式:

P [ years-months-days ] [ T hours:minutes:seconds ]

字符串必须以 P 开头,T 分隔时间间隔的日期部分和时间部分。各值采用类似 ISO 8601 日期的数字形式。

当编写带有 fields 说明的间隔常量,或者把字符串赋给一个定义时带有 fields 说明的间隔列时,未标记数量的解释方式取决于 fields。例如,INTERVAL '1' YEAR 会被读作 1 年,而 INTERVAL '1' 表示 1 秒。此外,位于 fields 说明所允许的最小字段“右侧”的字段值会被静默丢弃。例如,写 INTERVAL '1 day 2:03:04' HOUR TO MINUTE 会导致秒字段被丢弃,而不是日字段。

根据 SQL 标准,一个间隔值的所有字段都必须带有相同符号,因此一个前导负号会作用于所有字段;例如间隔字面值 '-1 2:03:04' 中的负号会同时作用于日、小时、分钟和秒。PostgreSQL 允许各字段具有不同符号,并且传统上认为文本表示中的每个字段都带有各自独立的符号,因而在这个例子里,小时、分钟和秒部分会被视为正值。如果 IntervalStyle 被设置为 sql_standard,则会把前导符号视为作用于所有字段(但前提是没有出现额外符号);否则将采用传统的 PostgreSQL 解释。为了避免混淆,我们建议只要有任何字段为负值,就为每个字段都显式写出符号。

在内部,interval 值以三个整数字段存储:月、日和微秒。之所以将它们分开保存,是因为一个月中的天数会变化,而如果涉及夏令时切换,一天也可能只有 23 或 25 小时。使用其他单位的间隔输入字符串会先规范化为这种格式,然后再以标准化方式重建输出,例如:

SELECT '2 years 15 months 100 weeks 99 hours 123456789 milliseconds'::interval;
               interval
---------------------------------------
 3 years 3 mons 700 days 133:17:36.789

这里,周按“7 天”计算并单独保留,而较小和较大的时间单位则被合并并规范化了。

输入字段值可以带有小数部分,例如 '1.5 weeks' 或 '01:02:03.45'。然而,由于 interval 在内部只存储整数字段,小数值必须转换成更小的单位。大于月的单位的小数部分会被舍入为整数个月,例如 '1.5 years' 会变成 '1 year 6 mons'。周和天的小数部分会在假定每月 30 天、每天 24 小时的前提下,计算成整数天和微秒,例如 '1.75 months' 会变成 1 mon 22 days 12:00:00。只有秒在输出时才可能显示为小数。

表 8.17展示了一些有效interval输入的示例。

表 8.17. 间隔输入

示例 说明
1-2 SQL 标准格式:1 年 2 个月
3 4:05:06 SQL 标准格式:3 天 4 小时 5 分钟 6 秒
1 year 2 months 3 days 4 hours 5 minutes 6 seconds 传统 Postgres 格式:1 年 2 个月 3 天 4 小时 5 分钟 6 秒
P1Y2M3DT4H5M6S ISO 8601 “带标志符的格式”:含义同上
P0001-02-03T04:05:06 ISO 8601 的“替代格式”:含义同上

如前所述,PostgreSQL 将 interval 值存储为月、日和微秒。输出时,月份字段通过除以 12 转换为年和月;天数字段原样显示;微秒字段转换为时、分、秒和小数秒。因此,月、分、秒的显示值分别不会超出 0–11、0–59 和 0–59 的范围,而年、日、时的显示值则可以很大。(若希望将较大的天数或小时数折算到更高一级字段,可使用 justify_days 和 justify_hours 函数。)

可使用 SET intervalstyle 将 interval 的输出格式设为 sql_standard、postgres、postgres_verbose 或 iso_8601 四种风格之一,默认为 postgres。表 8.18 给出了各输出风格的示例。

如果间隔值满足 SQL 标准的限制条件(仅有年-月或仅有日-时间,且不混合正负分量),sql_standard 风格会生成符合 SQL 标准的间隔字面值输出。否则,输出将表现为一个标准的年-月字面值串后跟一个日-时间字面值串,并显式加上符号,以消除正负混合间隔的歧义。

postgres 样式的输出与 PostgreSQL 8.4 之前版本在DateStyle参数设为 ISO 时的输出一致。

postgres_verbose 样式的输出与 PostgreSQL 8.4 之前版本在 DateStyle 参数设为非 ISO 输出时的结果一致。

iso_8601 风格的输出符合 ISO 8601 标准 4.4.3.2 节描述的“带标志符的格式”。

表 8.18. 间隔输出风格示例

风格设置 年-月间隔 日-时间间隔 混合间隔
sql_standard 1-2 3 4:05:06 -1-2 +3 -4:05:06
postgres 1 year 2 mons 3 days 04:05:06 -1 year -2 mons +3 days -04:05:06
postgres_verbose @ 1 year 2 mons @ 3 days 4 hours 5 mins 6 secs @ 1 year 2 mons -3 days 4 hours 5 mins 6 secs ago
iso_8601 P1Y2M P3DT4H5M6S P-1Y-2M3D​T-4H-5M-6S

系统目录属性

此构建的源码初始化值。字段含义参见 pg_type 。包含头文件默认值;依赖构建的常量保留符号形式,不作为服务器运行时实测。

oid
1184
descr
date and time with time zone
typacl
_null_
typlen
8
typelem
0
typname
timestamptz
typsend
timestamptz_send
typtype
b
typalign
d
typarray
0
typbyval
FLOAT8PASSBYVAL
typdelim
','
typinput
timestamptz_in
typmodin
timestamptztypmodin
typndims
0
typowner
POSTGRES
typrelid
0
typmodout
timestamptztypmodout
typoutput
timestamptz_out
typtypmod
-1
typanalyze
-
typdefault
_null_
typnotnull
f
typreceive
timestamptz_recv
typstorage
p
typbasetype
0
typcategory
D
typcollation
0
typisdefined
t
typnamespace
pg_catalog
typsubscript
-
typdefaultbin
_null_
array_type_oid
1185
typispreferred
t
array_type_name
_timestamptz

类型转换 7

与此类型相关的显式 pg_cast 记录。PostgreSQL 还支持 pg_cast 之外的类型转换,缺少记录不能证明转换不可能。

源类型目标类型转换上下文转换方式函数
datetimestamptz隐式函数timestamptz(date)
timestamptimestamptz隐式函数timestamptz(timestamp)
timestamptzdate赋值函数date(timestamptz)
timestamptztime赋值函数time(timestamptz)
timestamptztimestamp赋值函数timestamp(timestamptz)
timestamptztimetz赋值函数timetz(timestamptz)
timestamptztimestamptz隐式函数timestamptz(timestamptz,int4)

运算符重载 34

每种操作数签名均为独立重载。实现函数和返回类型来自同一源码构建。

运算符左操作数右操作数返回类型含义实现函数
=timestamptztimestamptzbool等于timestamptz_eq
<>timestamptztimestamptzbool不等于timestamptz_ne
<timestamptztimestamptzbool小于timestamptz_lt
<=timestamptztimestamptzbool小于等于timestamptz_le
>timestamptztimestamptzbool大于timestamptz_gt
>=timestamptztimestamptzbool大于等于timestamptz_ge
+timestamptzintervaltimestamptz相加timestamptz_pl_interval
-timestamptztimestamptzinterval相减timestamptz_mi
-timestamptzintervaltimestamptz相减timestamptz_mi_interval
<datetimestamptzbool小于date_lt_timestamptz
<=datetimestamptzbool小于等于date_le_timestamptz
=datetimestamptzbool等于date_eq_timestamptz
>=datetimestamptzbool大于等于date_ge_timestamptz
>datetimestamptzbool大于date_gt_timestamptz
<>datetimestamptzbool不等于date_ne_timestamptz
<timestamptzdatebool小于timestamptz_lt_date
<=timestamptzdatebool小于等于timestamptz_le_date
=timestamptzdatebool等于timestamptz_eq_date
>=timestamptzdatebool大于等于timestamptz_ge_date
>timestamptzdatebool大于timestamptz_gt_date
<>timestamptzdatebool不等于timestamptz_ne_date
<timestamptimestamptzbool小于timestamp_lt_timestamptz
<=timestamptimestamptzbool小于等于timestamp_le_timestamptz
=timestamptimestamptzbool等于timestamp_eq_timestamptz
>=timestamptimestamptzbool大于等于timestamp_ge_timestamptz
>timestamptimestamptzbool大于timestamp_gt_timestamptz
<>timestamptimestamptzbool不等于timestamp_ne_timestamptz
<timestamptztimestampbool小于timestamptz_lt_timestamp
<=timestamptztimestampbool小于等于timestamptz_le_timestamp
=timestamptztimestampbool等于timestamptz_eq_timestamp
>=timestamptztimestampbool大于等于timestamptz_ge_timestamp
>timestamptztimestampbool大于timestamptz_gt_timestamp
<>timestamptztimestampbool不等于timestamptz_ne_timestamp
+intervaltimestamptztimestamptz相加interval_pl_timestamptz

操作符类 5

声明输入类型与此类型相符的操作符类。多态操作符类、类型转换和表达式索引还可能提供其他索引路径;不能仅凭此表判断是否支持索引。

操作符类索引方法输入类型操作符族默认存储类型
timestamptz_opsbtreetimestamptzbtree/datetime_ops是与输入类型相同
timestamptz_opshashtimestamptzhash/timestamptz_ops是与输入类型相同
timestamptz_minmax_opsbrintimestamptzbrin/datetime_minmax_ops是timestamptz
timestamptz_minmax_multi_opsbrintimestamptzbrin/datetime_minmax_multi_ops否timestamptz
timestamptz_bloom_opsbrintimestamptzbrin/datetime_bloom_ops否timestamptz

版本比较

PostgreSQL 17.11 → 18.6。属性比较不包含构建标识和说明正文;原始目录字段与源描述保留原文。

这两个样本的系统目录和结构化属性没有变化。

这些构建的文档也有差异,请查看对应版本的手册定义。

文档与源码

构建
18.6 · https://ftp.postgresql.org/pub/source/v18.6/postgresql-18.6.tar.bz2
指纹
555610c24d53e4316da5b7d3fc25c279d96856d5e0e23ee308c328c5fa881d9f

相关条目

全部数据类型 · 下载此版本 JSON · 最早收录的样本不代表该类型的实际引入版本。