在postgresql的同一个表中复制行记录

Posted

技术标签:

【中文标题】在postgresql的同一个表中复制行记录【英文标题】:Duplicate a row record in same table in postgresql 【发布时间】:2016-11-18 04:56:12 【问题描述】:

我想在同一个表中复制一条行记录,但对某些列值进行了修改。我知道我可以使用以下脚本复制行记录。

INSERT INTO table_name( 
column_name1, column_name2, column_name3 ....
)
SELECT column_name1, column_name2, column_name3 ....
FROM table_name WHERE id=1;

但它会复制整行。对于修改,我还需要添加更新脚本。

所以我的问题是,有没有更简单的方法来处理我的场景。 由于我正在工作的表有大约 40 列,所以我认为这种方式不可行。

欢迎任何新想法。

提前致谢。

【问题讨论】:

您要更改哪些列以及要使用哪些值? 例如我要在其中设置“记录号重复...”的备注列 您没有提供足够的信息。 I want create a duplicate but different 非常模糊请阅读How-to-Ask 这里是START 了解如何提高问题质量并获得更好答案的好地方。 @Juan 每当您在同一个表中复制一行时,至少主键/列应该不同。所以我的意思是说,在同一个表中复制一行时,我们如何更新该主键。 首先您创建一个列SERIAL 这是自动数字并为您创建下一个序列。然后在您的INSERT 中不包含它。字段名称或值和数据库句柄都不是你的 【参考方案1】:

直接在SELECT中改变列的值,不需要额外的更新,如下例

INSERT INTO table_name( 
column_name1, column_name2, column_name3 ....
)
SELECT column_name1, 
       'New string value of column 2', 
       column_name3,
       ......
       ......
       1234 as new_val_of_col_25,
       column_name26,
       ......
FROM table_name WHERE id=1;

【讨论】:

以上是关于在postgresql的同一个表中复制行记录的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PostgreSQL 退出/注销? [复制]

PostgreSQL - 从相关表中复制列

Postgresql:如何用n步对组中的记录进行排序

PostgreSQL:在同一个表中选择几个查询

Slave没有在mysql主从复制中将任何数据写入表中

一种在大型 PostgreSQL 表中处理/合并“后继记录”的方法?