はい、入力行を参照テーブルに結合します。これにより、FK列に一致しない行が削除されます:
INSERT INTO entries(entry_id, referenced_id, name)
SELECT val.entry_id, val.referenced_id, val.name
FROM (
VALUES (1, 2, 'references two')
-- more?
) val (entry_id, referenced_id, name)
JOIN referenced USING (referenced_id) -- drop rows without matching FK
ON CONFLICT (entry_id) DO NOTHING; -- drop rows with duplicate id
UPSERT自体(INSERT ... ON CONFLICT DO NOTHING
)固有の違反にのみ反応します。マニュアル:
ON CONFLICT
一意性制約または除外制約違反エラーを発生させるための代替アクションを指定するために使用できます。 (以下の紛争条項を参照してください。)
VALUES
以降 式はINSERT
にアタッチされなくなりました 直接、列タイプはターゲットテーブルから派生しません。 キャストが必要になる場合があります 非基本タイプで操作する場合は、値を明示的に入力します。参照:
- 複数の行を更新するときにNULLタイプをキャストする