我有这样一张桌子。
create table public.test123
(id int not null primary key, dt timestamp null default clock_timestamp());
然后我从2个不同的客户会话中插入其中,第一个会话来自PG Admin,第二个会话来自DBeaver。
1]在我运行show timezone;
的第一个会话中,它返回UTC
。因此,此会话的时区为UTC
。因此,在本次会议上,我做了如下插入。
insert into public.test123(id) values (1);
2]在第二个会话中,我具有时区America/New_York
,并且执行此操作。
insert into public.test123(id) values (2);
我将两个插入物彼此分开仅几秒钟。
但是我在数据库中得到两个非常不同的值,例如
id|dt |
--|-------------------|
1|2020-06-05 14:38:18|
2|2020-06-05 10:38:26|
我一直认为,在这种情况下,clock_timestamp()
调用在服务器上执行,并且客户端会话的时区应该无关紧要。而且我希望得到两个值,它们相隔几秒钟而不是相隔4小时。
我想念的是什么?任何人都可以详细解释一下。
还有...是否有任何方法可以获取与客户端会话时区无关的时间戳?
如何创建具有默认时间戳值的列哪些真正独立于客户端会话的时区?
是,timestamp with time zone
,这是绝对时间戳,在您的情况下将是正确的数据类型。
如果使用timestamp without time zone
,则根据clock_timestamp()
的当前设置将timestamp with time zone
的结果timestamp without time zone
转换(隐式转换为timezone
。