sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLで外部キーを持つ行を削除する

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



    1. 変数のチェック中に間違ったタイプのオラクル式

    2. Oracle SQl Dev、2つの日付の間の平日の数を計算する方法

    3. SQL Server:合計が値と一致する最新の行を選択します

    4. Oracleのデフォルトの日付形式はYYYY-MM-DDですが、なぜですか?