我有一个PostgreSQL数据库,发票表中有一个日期字段:
Column | Type |
payment_date | timestamp with time zone |
该服务器位于GMT-5,如您所见:
$date
Tue Jan 22 17:33:01 EST 2019
通过PostgreSQL命令获取GMT时间会给我:
select current_timestamp at time zone 'GMT';
timezone
----------------------------
2019-01-22 22:33:01.087354
问题是当我执行插入/更新时:
update invoices set payment_date = current_timestamp at time zone 'GMT'
然后,当我得到查询结果时...
select payment_date from invoices
它给了我
2019-01-22 22:33:01.087354-05
错!应该给我 2019-01-22 22:33:01.087354- 00
我在做什么错了?
答案 0 :(得分:2)
您的字段payment_date
是(正确)类型timestamp with time zone
,因此使用您的会话时区来转换timestamp without time zone
操作的结果AT TIME ZONE
。
PostgreSQL的timestamp with time zone
数据类型不存储时区信息,它存储UTC时间戳,该时间戳转换为显示的会话时区。
最好将时间戳记存储为timestamp with time zone
,并在显示时将其转换为所需的时区。