これを自動化するには、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
で削除します。 (毎回)残りのオプションです。