sql - postgresql 从选择中插入

标签 sql database postgresql

我有两个表 table1 和 test_table1,它们具有相同的模式。

两个表都有行/数据和 pk id 从 1 开始。

我想做的事:

insert into test_table1 select * from table1;

但是由于 test_table1 中存在来自 table1 的 pk 值,这失败了。

绕过它的方法是指定列并将 pk 列排除在外,但由于某些原因,这也不起作用:

例如 注意 - 下面的查询中没有 pk 列

insert into test_table1 (col1, col2,..., coln) select col1,col2,...,coln from table1;

返回

ERROR: duplicate key value violates unique constraint "test_table1_pkey" DETAIL: Key (id)=(1) already exists.

我知道这在 MySql 中有效,这只是因为 Postgresql 吗?不管怎么样?

编辑:

两个表都有主键和序列集。

因为不清楚 - 表没有相同的数据。 我只想将表 1 中的行添加到 test_table1。

对于告诉我从查询中排除主键的答案 - 我按照我之前说的做了。

最佳答案

只需从查询列中删除 pk 列

insert into test_table1 (col2,..., coln) select col2,...,coln from table1;

如果仍然失败,则可能您没有对 pk 列进行排序。 在现有的 pk 列上创建序列

create sequence test_table1_seq;
ALTER TABLE test_table1 
    ALTER COLUMN col1 SET DEFAULT nextval('test_table1_seq'::regclass);

并将序列值更新为当前值

SELECT setval('test_table1_seq', (SELECT MAX(col1) FROM test_table1));

关于sql - postgresql 从选择中插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38488778/

相关文章:

javascript - Node mssql更新查询,获取行数

MySQL left join variation - 甚至在丢失的行上选择

android - Eclipse : debug sqlite database on Android device live 的 SQLite 插件

javascript - Sproutcore数据源: How should a created record be saved in the datasource?

postgresql - 管理近 3.5 PB/3500 TB 的数据

sql - 在 SQL 中读取 XML BOOLEAN 值

mysql - 用于比较的除命令之外的 SQL

android - 如何导入sqlite数据库android

postgresql - Citus 是否公开了用于修剪碎片的哈希函数?

postgresql - 带有gorm拨号错误的PostgreSQL连接无法分配请求的地址