これを自動化するには、ON DELETE CASCADEを使用して外部キー制約を定義できます。 。
次のように現在のFK定義を調べます。
SELECT pg_get_constraintdef(oid) AS constraint_def
FROM pg_constraint
WHERE conrelid = 'public.kontakty'::regclass -- assuming public schema
AND conname = 'kontakty_ibfk_1';
次に、ON DELETE ...を追加または変更します ON DELETE CASCADEの一部 (他のすべてをそのまま保持する)次のようなステートメントで:
ALTER TABLE kontakty
DROP CONSTRAINT kontakty_ibfk_1
, ADD CONSTRAINT kontakty_ibfk_1
FOREIGN KEY (id_osoby) REFERENCES osoby (id_osoby) ON DELETE CASCADE;
ALTER CONSTRAINTはありません 指図。制約を削除して、単一のALTER TABLEに再作成します 同時書き込みアクセスで発生する可能性のある競合状態を回避するためのステートメント。
もちろん、そうするためには特権が必要です。操作にはACCESS EXCLUSIVEが必要です テーブルをロックするkontakty およびSHARE ROW EXCLUSIVE テーブルをロックするosoby 。
ALTERができない場合 テーブルを作成してから、手動(1回)またはトリガーBEFORE DELETEで削除します。 (毎回)残りのオプションです。