gpt4 book ai didi

postgresql - 在 Postgresql 中创建重复行

转载 作者:行者123 更新时间:2023-11-29 14:32:24 24 4
gpt4 key购买 nike

我正在编写迁移脚本来迁移数据库。考虑到不同的数据库在表中可以有 n 个不同的列,我必须通过增加主键来复制该行。我不能写查询中的每一列。如果我只是简单地复制该行,则会出现重复键错误。

Query: INSERT INTO table_name SELECT * FROM table_name WHERE id=255;

ERROR: duplicate key value violates unique constraint "table_name_pkey"
DETAIL: Key (id)=(255) already exist

在这里,我不必提及所有列名,这很好。我可以通过给 * 选择所有列。但是,同时我也遇到重复键错误。

这个问题的解决方案是什么?任何帮助,将不胜感激。提前致谢。

最佳答案

如果你愿意输入所有的列名,你可以这样写

INSERT INTO table_name (
pri_key
,col2
,col3
)
SELECT (
SELECT MAX(pri_key) + 1
FROM table_name
)
,col2
,col3
FROM table_name
WHERE id = 255;

其他选项(无需键入所有列,但您知道主键)是创建一个临时表,更新它并在事务中重新插入。

BEGIN;
CREATE TEMP TABLE temp_tab ON COMMIT DROP AS SELECT * FROM table_name WHERE id=255;
UPDATE temp_tab SET pri_key_col = ( select MAX(pri_key_col) + 1 FROM table_name );
INSERT INTO table_name select * FROM temp_tab;
COMMIT;

关于postgresql - 在 Postgresql 中创建重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com