PostgreSQL序列相关问题“ id越来越重复”?

问题描述 投票:0回答:1

我有一个名为document的表及其序列document_seq。我在项目中使用了多个堆栈(节点和播放框架以及数据库,如Postgres)。假设我的文档表的最后一个id是119,然后我尝试从节点插入一行,然后它变成120(document_id),然后尝试通过play框架进入文档表,那么它应该生成121,但代替的是在文档中插入120作为列的ID,因此文档表会产生ID错误的重复。当我在插入数据后用顺序检查时,它比上一个值增加+20或更多时间。

针对此问题

  1. 我已经尝试通过创建触发器来重置sequence_id,它将使用最后一个document_id重置序列。

  2. 也试图删除document_seq并设置document_id为序列号,但出现序列错误。

java node.js postgresql playframework
1个回答
0
投票

您不需要使用触发器。在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非常重要。 secquence函数nextval一步读取并增加序列。

© www.soinside.com 2019 - 2024. All rights reserved.