PostgreSQL でテーブルを更新し、同時に別のテーブルにデータを挿入することは可能ですか。
お気に入り
UPDATE table1
SET column4=true
AND INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter"
;
PostgreSQL でテーブルを更新し、同時に別のテーブルにデータを挿入することは可能ですか。
お気に入り
UPDATE table1
SET column4=true
AND INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter"
;
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;
トランザクション内で複数のステートメントを実行できるため、データに対するアトミックな変更のままです。
BEGIN;
UPDATE table1
SET column4=true;
INSERT into table2
SELECT column1, column2, column3
FROM table 1
WHERE column1="peter";
COMMIT;
何らかの理由で挿入が失敗した場合、トランザクション全体が失敗し、insert ステートメントの前に実行された更新を含む変更がバックアウトされます。