linux - PostgreSQL:CURRENT_TIMESTAMP 和 CLOCK_TIMESTAMP 解决方案:Windows 与 Linux?

标签 linux windows postgresql timer time-precision

所以我对 PostgreSQL 计时函数有这个有趣的问题。

情况是这样的。我们有一个预生产服务器 (Linux),用于存放我们正在开发的应用程序。我还在该数据库 (Windows) 的本地副本上做一些工作,以防服务器正在进行一些更重要的工作。我最近遇到了一个问题,我开始在本地数据库副本的日志表上发现主键违规。我认为这是不可能的,因为我使用 CLOCK_TIMESTAMP(当前系统时间)作为主键。此外,我在预生产服务器上进行了测试,它运行良好。所以我做了一些调查。我最终发现,如果我在服务器上运行“SELECT CLOCK_TIMESTAMP()”,它会将时间返回到微秒。如果我在我的本地主机上运行它,它只会下降到毫秒。因此,当计时器到达下一毫秒之前发生多个更新时,就会出现问题,考虑到我们的某些流程,这绝对是可能的。

所以我的问题是这样的。为什么会发生这种情况,我该如何解决?这是我还没有找到的一些晦涩的设置吗?还是 Windows 与 Linux 的定时器分辨率不同?

编辑:CURRENT_TIMESTAMP、NOW() 和所有其他返回时间戳的内置函数也会发生同样的事情。

谢谢

最佳答案

在这个 pg_hackers 线程上引用 Tom Lane:

http://www.postgresql.org/message-id/9699.1262011789@sss.pgh.pa.us

I suppose what you're really asking about is not the precision of the datatype but the precision of now() readings. You're out of luck --- Windows just doesn't expose a call to get the wall clock time to better than 1 msec.

Keep in mind that whatever the Linux machine is returning might be largely fantasy in the low-order bits, too.

要解决您的问题,请考虑使用序列号作为主键。 (当然,假设您实际上首先需要日志文件的主键。)

关于linux - PostgreSQL:CURRENT_TIMESTAMP 和 CLOCK_TIMESTAMP 解决方案:Windows 与 Linux?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19776593/

相关文章:

postgresql - 将单个文本字段转储到 psql 中的单独文件中

基于 Http 的 Linux 服务器状态 API

linux - H2O 连接错误 : HTTP 403 Forbidden

linux - 如何使用 Linux (Bash) 在目录内移动文件

代码崩溃并出现错误段错误(核心转储)

c++ - 如何使用 CMake 将 NMake 从 VS9 切换到 VS10

ruby-on-rails - 通过 Rails 和 pg gem 插入 PostgreSQL 服务器时,“ token "-"无效”

c++ - 声明 SID Windows c++

python - 使用 Python 从已连接的 Windows 网络共享中获取 IP 地址

PostgreSQL/PGAdmin4 错误 : there is no unique constraint matching given keys for referenced table