我正在获取我的数据:日期和时间以协调世界时的格式,分别在csv文件中的不同列中。由于我需要将这个时区转换为我居住的地方的日期和时间(目前是夏令时UTC+2),可能还有其他时区,我在想在涉及数据类型时,将数据插入到postgres数据库中最好的做法是什么。我应该将我的两个数据放在一个单独的列中,还是保持它们作为数据类型的分开,如果不是,我应该使用timestamp或timestampz(或其他什么)。
我正在获取我的数据:日期和时间以协调世界时的格式,分别在csv文件中的不同列中。由于我需要将这个时区转换为我居住的地方的日期和时间(目前是夏令时UTC+2),可能还有其他时区,我在想在涉及数据类型时,将数据插入到postgres数据库中最好的做法是什么。我应该将我的两个数据放在一个单独的列中,还是保持它们作为数据类型的分开,如果不是,我应该使用timestamp或timestampz(或其他什么)。
timestamptz
,它将在UTC中存储您的时间戳,并根据客户端的语言环境进行显示。
https://www.postgresql.org/docs/current/static/datatype-datetime.html
对于带有时区的时间戳,内部存储值总是以UTC(协调世界时,传统上称为格林威治标准时间,GMT)表示。具有显式时区的输入值会使用该时区的适当偏移量转换为UTC。如果输入字符串中未指定时区,则假定其在系统的TimeZone参数指示的时区中,并使用时区偏移将其转换为UTC。t=# create table t(t timestamptz);
CREATE TABLE
t=# set timezone to 'GMT+5';
SET
t=# insert into t select '2017-01-01 00:00:00';
INSERT 0 1
t=# insert into t select '2017-01-01 00:00:00' at time zone 'UTC';
INSERT 0 1
t=# insert into t select '2017-01-01 00:00:00+02';
INSERT 0 1
t=# select * from t;
t
------------------------
2017-01-01 00:00:00-05
2017-01-01 05:00:00-05
2016-12-31 17:00:00-05
(3 rows)
TimeZone
设置为UTC
,要么使用TIMESTAMP '<UTC-string>' AT TIME ZONE UTC
。 - Laurenz Albe