PostgreSQL 11-默认时间戳列

问题描述 投票:0回答:1

我有这样一张桌子。

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小时。

我想念的是什么?任何人都可以详细解释一下。

还有...是否有任何方法可以获取与客户端会话时区无关的时间戳?

如何创建具有默认时间戳值的列哪些真正独立于客户端会话的时区?

sql postgresql
1个回答
0
投票

是,timestamp with time zone,这是绝对时间戳,在您的情况下将是正确的数据类型。

如果使用timestamp without time zone,则根据clock_timestamp()的当前设置将timestamp with time zone的结果timestamp without time zone转换(隐式转换为timezone

© www.soinside.com 2019 - 2024. All rights reserved.