我想在幾個表中的UTC時間戳「創建」字段。Postgres UTC時間戳?
ts TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
給我的本地時間與時區:
foo=# select ts from messages;
ts
-------------------------------
2017-05-26 11:54:07.532796+01
2017-05-26 11:54:08.536241+01
2017-05-26 11:54:09.538119+01
2017-05-26 11:54:10.541089+01
2017-05-26 11:54:11.543262+01
ts TIMESTAMP NOT NULL DEFAULT now(),
給我本地時間沒有時區信息(危險):
foo=# select ts from messages;
ts
----------------------------
2017-05-26 11:56:00.134596
2017-05-26 11:56:01.13798
2017-05-26 11:56:02.140586
2017-05-26 11:56:03.143076
2017-05-26 11:56:04.14565
什麼字段定義會給我下面,當代碼在非UTC時區(例如BST,英國夏令時)的服務器上運行時:
foo=# select ts from messages;
ts
----------------------------
2017-05-26 10:56:00.134596+00
2017-05-26 10:56:01.13798+00
2017-05-26 10:56:02.140586+00
2017-05-26 10:56:03.143076+00
2017-05-26 10:56:04.14565+00
連:
foo=# select ts from messages;
ts
----------------------------
2017-05-26 10:56:00.134596
2017-05-26 10:56:01.13798
2017-05-26 10:56:02.140586
2017-05-26 10:56:03.143076
2017-05-26 10:56:04.14565
就可以了,如果不出意外是可能的(注:時間爲上午10點UTC,不是上午11點BST在這兩個例子以上)。
timestamptz會做。您的客戶端時區將運行時間,該時間值將轉換爲UTC並保存到服務器。 postgres以UTC格式保存所有時間戳 –