Postgresql postgres-显示带有或不带时区参数设置的时间戳列

Postgresql postgres-显示带有或不带时区参数设置的时间戳列,postgresql,datetime,timezone,timestamp,Postgresql,Datetime,Timezone,Timestamp,首先,报告说: 为了解决这些困难,我们建议使用 使用时区时同时包含日期和时间。我们不建议 将time类型与时区一起使用(尽管受 PostgreSQL用于遗留应用程序并符合SQL 标准)。PostgreSQL假定您的本地时区适用于任何类型 只包含日期或时间的 在显示时间戳数据时,它显示: 所有时区感知日期和时间都存储在UTC内部。他们 将转换为时区指定区域中的本地时间 向客户端显示之前的配置参数 因此,我将列定义为时间戳数据类型,并在表中插入“2018-05-24 09:30:00+05:30”。

首先,报告说:

为了解决这些困难,我们建议使用 使用时区时同时包含日期和时间。我们不建议 将time类型与时区一起使用(尽管受 PostgreSQL用于遗留应用程序并符合SQL 标准)。PostgreSQL假定您的本地时区适用于任何类型 只包含日期或时间的

在显示时间戳数据时,它显示:

所有时区感知日期和时间都存储在UTC内部。他们 将转换为时区指定区域中的本地时间 向客户端显示之前的配置参数

因此,我将列定义为
时间戳
数据类型,并在表中插入
“2018-05-24 09:30:00+05:30”
。基于上述几点,我希望看到UTC的时间戳(在选择查询输出中),即
2018-05-24 04:00:00
,因为
时区设置为UTC。当我将参数更改为

SET TIME ZONE INTERVAL '+05:30' HOUR TO MINUTE;
我希望看到
2018-05-24 09:30:00
。但是,不管时区参数是什么,我看到的查询输出都是
2018-05-24 09:30:00
。这一观察结果如何与文献相符


对数据库的插入是通过Javascript完成的,而其他操作是通过
psql

完成的。文档中的关键措辞是“时区感知日期和时间”。这是指
timestamptz
类型

重新表述文档:当您希望在输入/输出期间发生时区时,请使用
timestamtz
type

  • 此类型在会话时区中呈现/输出。也就是说,所有值都将从UTC偏移,并以区域后缀显示,例如
    +05:30
  • 没有任何区域信息的文字被解释/输入为在会话时区中。也就是说,
    2018-05-24 09:30:00
    的作用就像它有后缀
    +05:30
  • 文字中的区域信息将被考虑而不是丢弃。也就是说,
    2018-05-24 09:30:00+05:30
    将转换为
    04:00
    UTC

  • (输入端似乎有点神奇,但这是因为文字在被强制转换或与键入的内容一起使用之前是非类型化的。也就是说,
    '2018-05-24 09:30:00+05:30'
    本身既不是时间戳也不是时间戳。它是一堆在插入表或与列比较时解释的字符。)带
    时间戳
    ,您是指带时区的
    时间戳
    ?因为,我使用的列数据类型是
    TIMESTAMP
    。在这种情况下,
    时区
    参数的设置不适用?>
    timestamptz
    是时区时间戳的缩写;这是一个PostgreSQL扩展。您可以使用类型转换来试验不同组合的行为:
    选择'some value'::timestamp,'some value'::timestamp