我有两个表 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/