如何在postgres中的同一个表中克隆或复制记录?

Jay*_*Jay 3 postgresql records clone copy crud

如何通过创建临时表来克隆或复制PostgreSQL中相同表中的记录.

尝试使用更改的名称(在该表中基本上是复合键)创建从一个表到同一个表的记录克隆.

kha*_*son 11

你可以将所有这一切INSERT结合起来SELECT.

即假设你有以下表格定义和填充的数据:

create table original
(
  id serial,
  name text,
  location text
);

INSERT INTO original (name, location)
VALUES ('joe', 'London'),
       ('james', 'Munich');
Run Code Online (Sandbox Code Playgroud)

然后你就可以INSERT在不使用a的情况下进行你正在谈论的那种切换TEMP TABLE,如下所示:

INSERT INTO original (name, location)
SELECT 'john', location
FROM original
WHERE name = 'joe';
Run Code Online (Sandbox Code Playgroud)

这是一个sqlfiddle.

这也应该快了(尽管微小的数据集可能不会如此巨大的绝对时间方面),因为它做只有一个INSERTSELECT而不是额外的SELECTCREATE TABLE外加的UPDATE.


Jay*_*Jay 2

做了一些研究,得出了一个逻辑:

  1. 创建临时表
  2. 将记录复制到其中
  3. 更新临时表中的记录
  4. 复制回原表
CREATE TEMP TABLE temporary AS SELECT * FROM ORIGINAL WHERE NAME='joe';

UPDATE TEMP SET NAME='john' WHERE NAME='joe';

INSERT INTO ORIGINAL SELECT * FROM temporary WHERE NAME='john';
Run Code Online (Sandbox Code Playgroud)

想知道是否有更短的方法来做到这一点。