プロが教える店舗&オフィスのセキュリティ対策術

SQLほぼ初心者です。
いわゆるUPSERT(Postgresql ですので INSERT ... ON CONFLICT UPDATE ... のことです)を
複数行まとめて実行する方法はありますでしょうか。
どなたかご教示のほど宜しくお願い致します。

A 回答 (3件)

ON CONFLICT を使った場合、競合した行はEXCLUDED という名前の「テーブル」に一時保存されます。

列はINSERT対象のテーブルと同じです。

https://www.postgresql.jp/document/9.5/html/sql- …
> ON CONFLICT DO UPDATEのSET句とWHEREは既存の行にテーブルの名前(または別名)を使ってアクセスでき、また挿入されようとしていた行には、特別なexcludedテーブルを使ってアクセスできます。

まず、CONFLICTを使わない複数行同時のINSERTを考えます。
INSERT INTO table1
VALUES
(10, 20, 30),
(11, 21, 31)

これに、CONFLICT以降を追加します。
このとき、UPDATEの値を直接書くのではなく、EXCLUDEDテーブルからの値、として記述します。
ON CONFLICT ON CONSTRAINT pk_table1
DO UPDATE
SET
b = EXCLUDED.b,
c = EXCLUDED.c
    • good
    • 1

具体的に、何がわからないのでしょうか?



INSERT 〜 ON CONFLICT UPDATE 〜 は、 VALUE に複数行指定したり、クエリで複数行指定したりした場合にも対応しています。
    • good
    • 0
この回答へのお礼

お返事遅くなり失礼します。
具体的には今今以下の文1と文2があるのですがこれを1つにまとめるにはどう書けば良いでしょうか。
宜しくお願い致します。

【文1】
INSERT INTO table1
VALUES(10, 20, 30)
ON CONFLICT ON CONSTRAINT pk_table1
DO UPDATE SET b = 20, c = 30

【文2】
INSERT INTO table1
VALUES(11, 21, 31)
ON CONFLICT ON CONSTRAINT pk_table1
DO UPDATE SET b = 21, c = 31

※上記の10, 11の箇所がプライマリキーです。

お礼日時:2022/03/28 14:23

完璧に初心者です。


ググっただけですし。

取得した別のテーブルのデータをテーブルに追加する
https://www.dbonline.jp/postgresql/insert/index2 …

具体的な点は『ポカん?』ですが、ようは別のテーブルを用意してそちらにデータを保存(蓄積?)しておき、あとは条件に添うなどで一気に行ってしまうとか?
は出来ないかなとググってみました。
    • good
    • 0
この回答へのお礼

お返事遅くなり失礼します。アイデアのご教示ありがとうございます、他の方法が見つからなかった場合の代案候補にさせて頂きます。

お礼日時:2022/03/28 14:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す