我有两个postgresql服务器 - 一个在我的Windows机器上运行本地服务器,另一个在beta linux服务器上运行。
我在两者上运行此命令(非常接近同一时间):
select current_setting('TIMEZONE'), now();
本地数据库结果:
"US/Pacific";"2015-10-09 12:29:51.053-07"
Beta DB结果:
"US/Pacific";"2015-10-09 12:23:00.121953-07"
正如您所看到的,时区是相同的,但时间不是 - 本地数据库上的时间是正确的,但测试版服务器上的时间似乎是大约6分51秒。
根据答案编辑:
另外,我检查了两个操作系统上的日期和次数,两者都是正确的。
选择不是大事务的一部分。我正在使用pgAdmin来运行这些语句。另外,我使用now()函数运行timeofday(),它们返回与now()函数调用完全相同的时间。
知道这是怎么回事吗?
答案 0 :(得分:2)
您确定在两台机器上检查了操作系统上的当前日期/时间吗?看起来他们的时钟不是“同步”......
另外,你在“长时间运行”交易中运行“选择”吗? “now()
”函数始终返回事务开始时“冻结”的时间。要在事务中获得运行时间,请使用timeofday()函数。
答案 1 :(得分:1)
PostgreSQL直接调用基础操作系统的日期和时间例程来获取时间戳,仅调整时区(如果需要)和纪元 - 这是固定的。
您的时钟很可能实际上并非在两台主机之间同步。设置网络时间同步。问题将消失。如果您确实非常确定它们,请检查unix系统上date +%H:%M:%S
命令的输出,以及Windows命令行上的time /T
。它们真的一样吗?
如果他们在PostgreSQL中有所不同,但操作系统和报告的情况不同,那么您已经设置了网络时间同步,请向pgsql-bugs报告错误或在此处跟进。但请确保它们真的相同,并确保网络时间同步处于活动状态并正常工作。
答案 2 :(得分:0)
您检查了两台机器上的日期 - 但是您是否也检查了时间?保持时间同步的最佳方法是在所有计算机上使用NTP。此外,如果您不确定事务,可以使用timeofday()来获取当前系统时间。
SELECT timeofday();