PostgreSQL中是否可以更新表并同时将数据插入另一个表中。
像
UPDATE table1
SET column4=true
AND INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter"
;
答案 0 :(得分:2)
在Postgres 9.1或更高版本中,您可以使用以下内容:
WITH source AS (UPDATE table1
SET column4=true
WHERE column1='peter'
RETURNING column1, column2, column3)
INSERT INTO table2
SELECT column1, column2, column3
FROM source;
答案 1 :(得分:0)
您可以在事务中执行多个语句,因此它仍然是对数据的原子更改。
BEGIN;
UPDATE table1
SET column4=true;
INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter";
COMMIT;
如果由于某种原因插入失败,整个事务将失败,并且将撤消更改,包括在insert语句之前执行的更新。