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

8
如何在PostgreSQL中通过创建临时表复制或克隆同一表中的记录。
试图创建来自一个表的记录的克隆到同一表,并更改名称(这基本上是该表中的复合键)。
2个回答

14

您可以通过一个 INSERT 结合一个 SELECT 来完成所有操作。

例如,假设您有以下表定义和其中填充的数据:

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

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

接下来,您可以执行所述类型的切换操作,而无需使用 TEMP TABLE,像这样:

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

这里有一个sqlfiddle

这种方法应该更快(尽管对于微小的数据集来说在绝对时间方面可能不会明显),因为它只执行了一次INSERTSELECT,而不是额外的SELECTCREATE TABLEUPDATE


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';

我想知道是否有更简便的方法来实现这个功能。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接