我的列start_datetime
类型为timestamp with timezone
。我插入这样的数据:
INSERT INTO tbl VALUES('2014-05-28 13:20:00+05');
选择这样的数据:
SELECT start_datetime FROM tbl
我得到这个值(来自SELECT):2014-05-28 08:20:00+00
,这是转换为UTC的相同日期,这是正确的。
但是我想知道是否可以从timestamp with timezone
列类型中检索时区(示例中为+05)?我必须知道在数据库中插入了哪个时区时间戳。或者我可能必须将此数据存储在名为user_timezone
的单独列中,并在那里存储时区数据?
答案 0 :(得分:2)
所有时区感知日期和时间都以UTC格式存储在内部。他们 将在TimeZone指定的区域中转换为本地时间 配置参数在显示给客户端之前。
因此,如果您需要知道通过INSERT或UPDATE语句指定的源时区或时区,则需要将其存储在单独的列中。
谨慎的程序员将使用
这两个都应该由CHECK()约束或外键引用来保护。记录的注意事项与上面链接的部分相同。
pgsql-hackers邮件列表上的This recent thread有一些关于这个问题的好背景。