PostgreSQL是否保证独特的时间戳?

时间:2010-08-09 17:09:51

标签: sql database postgresql

Postgres 8.4的8字节整数are now the default,因此它允许存储微秒值。

我不太关心真正的微秒级精度(可能取决于操作系统的功能?!) - 但Postgres保证,时间戳值(由current_timestamp插入)在任何两个事务之间总是不同的吗?

5 个答案:

答案 0 :(得分:12)

没有

我做了一个小测试,从表中的5个并行客户端插入current_timestamp,3463个记录中的3个具有相同的时间戳。

答案 1 :(得分:2)

是的,精确度取决于操作系统。在单个事务中,使用CURRENT_TIMESTAMP时,时间戳都是相同的,当使用CLOCK_TIMESTAMP时,它们可能不同。不同的事务可以有不同的CURRENT_TIMESTAMPS,具体取决于您插入/更新的速度。

如果您需要唯一性,请添加唯一约束。

答案 2 :(得分:1)

即使它确实如此,依靠唯一的价值似乎也很危险。如果您需要唯一密钥,最好使用serial列等替代方法。

答案 3 :(得分:1)

幸运的是,因为那意味着“请让它慢下来,而不是必须”选项。

如果你真的需要什么是真正的串口,但看起来像时间戳,那么根据串口的结果添加几微秒!

答案 4 :(得分:1)

我同意添加序列号的建议。但是,如果您尝试执行的操作不值得更改架构,则可以使用系统列xmin来分隔具有相同时间戳但来自不同事务的行。

  SELECT ts, xmin, count(1)
  FROM foo
  GROUP BY ts, xmin