postgresql - 在 pg 转储后插入到表中

标签 postgresql stored-procedures psql node-postgres

我使用 pg_dump 来填充新数据库中的表。之后,我希望能够使用序列键的 default autoincrementer 将行插入到表中。这是我在表中的内容:

在这个表(smtable)中,a是key(设置为serial)。

--data filled using pg dump
a  |  b
1     2
2     5

现在当我执行以下语句时:

INSERT INTO smtable VALUES(DEFAULT, 6)
        RETURNING a INTO id;

我收到以下错误:

[error: duplicate key value violates unique constraint "a_pkey"]
detail: 'Key (a)=(1) already exists.

我如何得到这个语句来插入表的 next_key..

最佳答案

您可以将 serial 设置为当前 id 列的最大编号来解决问题。由于序列列与序列相关联,只需使用以下设置即可:

SELECT setval('smtable_a_seq', max(a)) FROM table;

关于postgresql - 在 pg 转储后插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298058/

相关文章:

java - 如何将所有数据分块插入数据库

sql - (连接表规范化架构)SQL 语句选择 WHERE [x] AND WHERE [Y]

mysql - 存储过程函数中的动态表名

sql - 用于通配符查找的正则表达式帮助

sequelize.js - 每次种子脚本运行时,使用 Sequelize 向 PSQL 的种子数据具有不同的 ID

postgresql - 为 PostgreSQL PSQL 永久设置千位分隔符?

postgresql - 在 SQL(postgresql) 中如何根据 "timestamp without time zone"列进行分组?

sql - 根据 JSONB 列中的数组有选择地提取键和值

stored-procedures - 图结构,使用存储过程找到父级,postgres

mysql - 无法在 mysql 存储过程上指定表名