如何在PostgreSQL中通过创建临时表复制或克隆同一表中的记录。
试图创建来自一个表的记录的克隆到同一表,并更改名称(这基本上是该表中的复合键)。
试图创建来自一个表的记录的克隆到同一表,并更改名称(这基本上是该表中的复合键)。
您可以通过一个 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。
这种方法应该更快(尽管对于微小的数据集来说在绝对时间方面可能不会明显),因为它只执行了一次INSERT
和SELECT
,而不是额外的SELECT
、CREATE TABLE
和UPDATE
。
做了一些研究,得出以下的逻辑:
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';
我想知道是否有更简便的方法来实现这个功能。