Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 博士后抱怨id';已经存在';在插入初始数据之后?_Postgresql - Fatal编程技术网

Postgresql 博士后抱怨id';已经存在';在插入初始数据之后?

Postgresql 博士后抱怨id';已经存在';在插入初始数据之后?,postgresql,Postgresql,我有一个问题,Postgres抱怨在导入一些初始数据后出现了重复的ID,我试图看看如何增加ID列计数器 详情: 我最近上传了一些初始数据到Postgres表中,在Sequelize模型定义中,id设置为autoincrement。例如: sequelize.define('user', { id: { type: Sequelize.INTEGER, primaryKey: true, autoInc

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

详情:

我最近上传了一些初始数据到Postgres表中,在Sequelize模型定义中,id设置为autoincrement。例如:

    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)已经存在。SQL Sequelize正在使用的格式为:

INSERT INTO "users" ("id","name") VALUES(DEFAULT, "nico");
如果我清空记录表并重试此操作或重试操作足够多次,那么我会看到计数器确实在递增。问题似乎是Postgres无法根据记录判断当前的最大id是什么

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


顺便说一句,使用Postgres 9.6尝试在最初插入数据之前删除该表,它可能是从上一次运行中持久化的,在这种情况下(1,“bob”)在您尝试再次添加它之前就已经在您的表中了。

再搜索一点,结果表明这将完成我需要做的事情

SELECT setval('users_id_seq', max(id)) FROM users;
此代码将
id
设置为表中当前的最大id,这里是我的
users
表。注意,要检查序列是否与列关联,这将起作用:

SELECT pg_get_serial_sequence('patients', 'id')
唯一需要注意的是,您忽略了返回值中的“public.”部分


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

这发生在我身上,因为我插入的记录使用文字、数值(而不是默认值或未定义值)作为自动递增列的参数。这样做会绕过列的增量调用,从而使序列的值与表中列的值不同步。

问题不是在初始添加期间,而是在之后的正常操作期间。所有添加了指定id的值都正确,但没有添加带有
默认id的值。从psql命令行进行模拟表明,使用id插入并没有更新列的增量。我明白了,我的错误。我对postgres还不太熟悉,无法评论如何跟踪下一个需要自动生成的id值参见链接文章中描述的行为与我们在此处看到的匹配。手动指定id值不会更新序列。只有
DEFAULT
会增加值,因此刷新序列显得很重要。例如,这与MySQL不同,MySQL根据列中的最大值自动递增。