防止重复使用密钥

时间:2018-10-28 15:47:43

标签: sql postgresql

数据库是Postgresql。为了简化示例,我将在各种表格中插入测量数据。一个示例表的示例DDL如下所示:

CREATE TABLE
measurement
(
    id_meas BIGINT NOT NULL,
    ...
    PRIMARY KEY (id_meas)
);

当前插入数据的过程如下:

  1. 从表中选择最大id值
  2. 增量ID值
  3. 使用递增的id值插入下一个数据行

这仅在只有一个客户端插入数据的情况下有效。但是,如果要插入> 1个客户端,以便两个客户端可以选择567作为最大id值,并且都将其递增到568作为要插入的下一个id值,该怎么办。在这种情况下,执行插入命令的第二个客户端将收到重复的密钥错误。除了在发生错误后重新执行插入过程之外,是否有其他方法可以防止这些错误?

1 个答案:

答案 0 :(得分:1)

您正在寻找serial列:

CREATE TABLE measurement (
    id_meas bigserial primary key,
    ...
);

bigserial是自动递增的bigint(请参阅here)。如果serial足够大,您也可以使用int

这使数据库负责增加值,而不是应用程序。您可以保证竞争条件不会在不同的记录中产生相同的值。在某些情况下,值的差距可能会出现。