首先,official document说明以下内容:
为解决这些困难,我们建议使用日期/时间类型 包含使用时区的日期和时间。我们不推荐 使用带时区的类型时间(虽然它受到支持 PostgreSQL用于遗留应用程序和符合SQL 标准)。 PostgreSQL假定您的任何类型的本地时区 仅包含日期或时间。
在显示时间戳数据时,它说:
所有时区感知日期和时间都以UTC格式存储在内部。他们 将在TimeZone指定的区域中转换为本地时间 配置参数在显示给客户端之前。
因此,我已将列定义为timestamp
数据类型,并以"2018-05-24 09:30:00+05:30"
形式插入表中。根据上面提到的几点,我希望在UTC中看到时间戳(在SELECT查询输出中),即2018-05-24 04:00:00
,因为TIME ZONE
设置为UTC。并且,当我将参数更改为
SET TIME ZONE INTERVAL '+05:30' HOUR TO MINUTE;
我希望看到2018-05-24 09:30:00
。但是,无论时区参数如何,我都将查询输出视为2018-05-24 09:30:00
。这个观察结果如何与文档相符?
数据库的插入是使用Javascript完成的,而其他操作是使用psql
完成的。
答案 0 :(得分:1)
文档中的关键词语是"时区感知日期和时间"。这是指timestamptz
类型。
修改文档:如果您希望在输入/输出期间发生时区,请使用timestamptz
类型。
+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'
本身既不是时间戳也不是timestamptz。它是在插入表格或与列比较时解释的一堆字符。)