Postgres中一列的时区值为默认的默认时间戳无效

时间:2018-09-27 13:39:33

标签: sql postgresql timestamp timestamp-with-timezone

我有一个具有以下结构的表:

   Column   |           Type           |  Default
------------+--------------------------+---------
 start_time | timestamp with time zone |
 end_time   | timestamp with time zone |
 created_at | timestamp with time zone | timezone('UTC'::text, now())

加上一些其他字段

我也insert将数据// INSERT statement // INSERT INTO table (start_time, end_time) VALUES (?::timestamptz, ?::timestamptz); // statement => PreparedStatement // sample.start(), sample.end() => java.time.LocalDateTime statement.setString(START_IDX, sample.start().format(DateTimeFormatter.ISO_DATE_TIME)); statement.setString(END_IDX, sample.end().format(DateTimeFormatter.ISO_DATE_TIME)); 插入表中(在Java中,使用JDBC):

end_time
created_atpsql之间的

可接受的差异应该是几秒钟。

但是现在当我查询-- LIMIT, ORDER BY removed for brevity SELECT created_at, start_time, end_time FROM table

中的数据时
    created_at             |    start_time             |    end_time    
---------------------------+---------------------------+---------------
 2018-09-27 09:13:07+05:30 | 2018-09-27 14:42:00+05:30 | 2018-09-27 14:43:00+05:30

我得到结果

+05:30

created_at的末尾不应有09:13:07
我想这意味着Postgres将带有时区的时间戳 视为IST处的09:13:07,应该将其视为UTC处的CREATE TABLE behaviour_sample ( sample JSON NOT NULL, start_time TIMESTAMPTZ NOT NULL, end_time TIMESTAMPTZ NOT NULL, device CHAR(16) REFERENCES device(eui) NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC') );

这会进一步破坏很多东西!

所以,我的问题是,什么原因导致此问题?是错误(1%)?还是我身边缺少某些东西(99%)?

P.S。我在Windows 10 64位系统上并使用Postgres 10.3

EDIT(1):

表创建为

created_at

编辑(2):

好的,所以我检查了我的其他表,它们也有类似的问题!

它们的共同点是{是使用

创建的created_at TIMESTAMPTZ NOT NULL DEFAULT (NOW() AT TIME ZONE 'UTC') 字段
14:30:00 +05:30

因此,如果我在09:00:00 +05:30处创建一条记录,则在查询时会显示utc!时间为ist,但时区为+05:30c = np.delete(a,b) print(len(a)) print(a) print(len(b)) print(b) print(len(c)) print(c) 部分)

0 个答案:

没有答案