关于postgresql:插入初始数据后Postgres抱怨id’已存在’?

Postgres complains id 'already exists' after insert of initial data?

我有一个问题,Postgres在导入一些初始数据后抱怨重复ID,我试图看看如何增加id列计数器?

细节:

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

1
2
3
4
5
6
7
8
    sequelize.define('user', {
        id: {
            TYPE: Sequelize.INTEGER,
            primaryKey: TRUE,
            autoIncrement: TRUE
        },
        name: Sequelize.STRING
    }

数据插页如下:

1
2
3
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使用的形式如下:

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

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

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

BTW使用Postgres 9.6


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

1
SELECT SETVAL('users_id_seq', MAX(id)) FROM users;

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

1
SELECT pg_get_serial_sequence('patients', 'id')

唯一需要注意的是你忽略了'公众'。 部分返回值。

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


尝试在最初插入数据之前删除表,它可能会在之前的运行中保持不变,在此情况下(1,"bob")已经在您的表中已经存在,然后再次尝试添加它。