数据库是Postgresql。为了简化示例,我将在各种表格中插入测量数据。一个示例表的示例DDL如下所示:
CREATE TABLE
measurement
(
id_meas BIGINT NOT NULL,
...
PRIMARY KEY (id_meas)
);
当前插入数据的过程如下:
这仅在只有一个客户端插入数据的情况下有效。但是,如果要插入> 1个客户端,以便两个客户端可以选择567作为最大id值,并且都将其递增到568作为要插入的下一个id值,该怎么办。在这种情况下,执行插入命令的第二个客户端将收到重复的密钥错误。除了在发生错误后重新执行插入过程之外,是否有其他方法可以防止这些错误?
答案 0 :(得分:1)
您正在寻找serial
列:
CREATE TABLE measurement (
id_meas bigserial primary key,
...
);
bigserial
是自动递增的bigint
(请参阅here)。如果serial
足够大,您也可以使用int
。
这使数据库负责增加值,而不是应用程序。您可以保证竞争条件不会在不同的记录中产生相同的值。在某些情况下,值的差距可能会出现。