postgresql - Postgres 在插入初始数据后提示 id 'already exists'?

标签 postgresql

我遇到一个问题,Postgres 在导入一些初始数据后提示 ID 重复,我想看看如何增加 ID 列计数器?

详细信息:

我最近将一些初始数据上传到 Postgres 表中,其中 ID 在我的 Sequelize 模型定义中设置为自动增量。例如:

    sequelize.define('user', {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: Sequelize.STRING
    }

数据插入看起来像:

INSERT INTO "users" ("id","name") VALUES(1, "bob");
INSERT INTO "users" ("id","name") VALUES(2, "brooke");
INSERT INTO "users" ("id","name") VALUES(3, "nico");

现在,当我尝试插入新记录时,我的 node.js 应用程序会提示 Key (id)=(1) already exists。 SQL Sequelize 正在使用以下形式:

INSERT INTO "users" ("id","name") VALUES(DEFAULT, "nico");

如果我清空记录表并重试此操作或重试操作足够多次,那么我会看到计数器确实增加了。问题似乎是 Postgres 无法根据记录判断当前的最大 ID 是多少?

在将初始数据上传到数据库后,告诉 Postgres 更新计数器的正确方法是什么?

顺便说一句,使用 Postgres 9.6

最佳答案

经过更多搜索后发现这将完成我需要做的事情。

SELECT setval('users_id_seq', max(id)) FROM users;

此代码会将 id 设置为表中的当前最大 id,这里是我的 users 表。请注意,要检查序列是否与列相关联,这将起作用:

SELECT pg_get_serial_sequence('patients', 'id')

唯一需要注意的是您忽略了“公众”。返回值中的一部分。

我会将 setval() 添加到我的初始数据脚本中。

关于postgresql - Postgres 在插入初始数据后提示 id 'already exists'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44708548/

相关文章:

postgresql - psql 扩展显示 - 避免破折号

SQL 自连接和聚合

postgresql - PG/hibernate : operator does not exist: character varying = bytea

sql - 从函数返回查询?

python - Django ORM : Equivalent of SQL `NOT IN` ? `exclude`和 `Q`对象不起作用

django - 带有 postgis 的 geodjango 不起作用

postgresql - 在文件系统上移动文件的 PostgreSQL 触发器

ruby-on-rails - Ruby on Rails - 通过连接在 has_many 中使用了错误的外键

java - 使用java将从Postgres数据库收集的数据写入文本文件

sql - 如何为每个 Y 找到最相关的 X?