我遇到了这个奇怪的问题,我使用sqlworkbench/J (一个java客户端)连接到本地pg14数据库,笔记本电脑挂起,早上运行以下查询:
select current_setting ('TIMEZONE'), current_timestamp, current_timestamp::timestamp;...I收到了以下结果:
亚洲/上海-----------------+-------------------------------+---------------------------- 2022-12-12 17:30:30.425635+08 2022-12-12 17:30:30.425635
但是,如果我打开(与sudo -u postgres psql的一个新会话),相同的查询将给我
亚洲/上海-----------------+-------------------------------+---------------------------- 2022-12-13 07:30:36.760764+08 2022-12-13 07:30:36.760764
我也尝试了pgmodeler,同样的正确结果。
sqlworkbench/j中所有涉及currenttimestamp的后续查询都会产生持续错误的结果(这就是我如何注意到的,我的一些涉及current_time - some_log_time的查询变成了负值,这在逻辑上是不可能的)。但是在我重新启动workbench/j之后(也许简单的重新连接就足够了,我很遗憾,我一开始就选择重新启动)。一切又恢复正常。
这种故障背后的逻辑是什么?current_timestamp不是仅在服务器端处理吗?(我的意思是说,无论工作台/j发生了什么情况,在这种情况下,查询为什么会产生负的时间差,这意味着服务器在该sql会话的查询处理中真的将current_timestamp作为17:xx,对吧?同时,新的会话被正确地视为7:xx )
发布于 2022-12-13 03:41:44
故障就在你这一边。旧会话启动了一个事务,并将其打开了几个小时。current_timestamp显示了启动事务的时间,不管事务需要多长时间。
可能在您的交互式客户端中禁用了自动提交。这是一个错误,因为它可能会对您的PostgreSQL数据库造成损害:您的事务可以防止自动清除死元组,如果有很多UPDATEs,这会让您的表不合理地增长。
https://dba.stackexchange.com/questions/320881
复制相似问题