如何通过创建临时表来克隆或复制PostgreSQL中同一个表中的记录。
尝试使用更改的名称(在该表中基本上是复合键)创建从一个表到同一个表的记录克隆。
答案 0 :(得分:10)
您可以将INSERT
与SELECT
结合使用。{/ 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。
这也应该更快(尽管对于微小的数据集在绝对时间方面可能不是很大),因为它只做一个INSERT
和SELECT
而不是额外的SELECT
和CREATE TABLE
以及UPDATE
。
答案 1 :(得分:1)
做了一些研究,提出了一个逻辑:
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';
想知道是否有更短的方法可以做到。