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

时间:2014-10-21 20:06:45

标签: postgresql copy clone crud records

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

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

2 个答案:

答案 0 :(得分:10)

您可以将INSERTSELECT结合使用。{/ p>

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

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

INSERT INTO original (name, location)
VALUES ('joe', 'London'),
       ('james', 'Munich');

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

INSERT INTO original (name, location)
SELECT 'john', location
FROM original
WHERE name = 'joe';

这是一个sqlfiddle

这也应该更快(尽管对于微小的数据集在绝对时间方面可能不是很大),因为它只做一个INSERTSELECT而不是额外的SELECTCREATE TABLE以及UPDATE

答案 1 :(得分:1)

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

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

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

    INSERT INTO ORIGINAL SELECT * FROM temporary WHERE NAME ='john';

    想知道是否有更短的方法可以做到。