代码之家  ›  专栏  ›  技术社区  ›  Chris Lercher

PostgreSQL是否保证时间戳的唯一性?

  •  7
  • Chris Lercher  · 技术社区  · 14 年前

    are now the default 对于Postgres8.4,它允许存储微秒值。

    current_timestamp )任何两个交易之间总是不同的?

    5 回复  |  直到 6 年前
        1
  •  12
  •   nos    14 年前

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

        2
  •  2
  •   Frank Heikens    14 年前

    是的,精度取决于操作系统。在单个事务中,使用当前时间戳时,时间戳都是相同的,使用时钟时间戳时,时间戳可能不同。不同的事务可以有不同的当前时间戳,这取决于插入/更新的速度。

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

        3
  •  1
  •   Justin Ethier    14 年前

    即便如此,依赖价值观的独特性似乎也是危险的。如果你需要一个唯一的钥匙,你最好使用一个替代品,如 serial 列。

        4
  •  1
  •   Jon Hanna    14 年前

    幸运的是没有,因为这将意味着一个“请使这比它必须慢”选项。

    如果你真的需要一个真正的序列,但是看起来像一个时间戳,那么根据序列的结果添加一些微秒!

        5
  •  1
  •   Scott Bailey    14 年前

    我同意增加连载的建议。但是,如果您正在尝试的操作不值得对模式进行更改,那么可以使用系统列xmin来分隔具有相同时间戳但来自不同事务的行。

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