我有一个名为document
的表及其序列document_seq
。
我在我的项目中使用多个堆栈( Node 和 Play Framework 以及 Postgres 等数据库)。假设我的文档表的最后一个 id 是 119,然后我尝试从 Node 插入一行,然后它变成 120 (document_id) 然后我尝试通过 play 框架输入文档表,那么它应该生成 121,但不是这个,而是在文档中插入120作为列的id,因此文档表产生重复的id错误。当我在插入数据后检查序列时,它比上一个值增加了 +20 或更多时间。
对于这个问题
我尝试通过创建触发器来重置sequence_id,它将使用最后一个document_id重置序列。
还尝试删除 document_seq 并使 document_id 序列化,但出现序列错误。
最佳答案
您不需要使用触发器。在 PostgreSQL 中,您可以使用特殊数据类型 serial
,如 documentation 中所述。 .
如果您创建一个如下表:
CREATE TABLE document (
id SERIAL,
text title
);
您可以非常轻松地插入数据,如下所示:
insert into documents (title) values('text');
并且序列工作正常。 serial
是一个快捷方式或宏,被翻译为:
CREATE SEQUENCE document_id_seq AS integer;
CREATE TABLE document (
id integer NOT NULL DEFAULT nextval('document_id_seq'),
text title
);
ALTER SEQUENCE document_id_seq OWNED BY document.id;
您也可以使用上述命令。在列定义的默认部分中使用 nextval
非常重要。 sequence 函数 nextval
一步读取并增加序列。
关于java - postgresql 序列相关问题 "id is getting repeated"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58411725/