java - postgresql 序列相关问题 "id is getting repeated"?

标签 java node.js postgresql playframework

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

对于这个问题

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

  2. 还尝试删除 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/

相关文章:

sql - 时间戳问题 - 不一致的行为 - PostgreSQL

java - gridbag约束不起作用

java - Spring MessageSource 通过多个语言环境查找

javascript - socket.io "connect"刷新/重新加载事件不会触发

javascript - Angular Express 刷新后从错误的 URL 获取文件

sql - 如何通过 where 条件从 1 开始的顺序值重置列的值

sql - Postgres - 如何将主键引用到非唯一值

java - 获取 Servlet 上下文的不同方法

java - Gson解码json

node.js - ExpressJS 中的 Sequelize 交易未执行