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

PostgreSQL-制約を無効にする

    以前のコメントによると、それは問題になるはずです。とは言うものの、あなたが探しているものかもしれないコマンドがあります-それは制約を延期に設定するので、それらはすべての削除ではなく、COMMITでチェックされます。すべての行に対して1つの大きなDELETEを実行している場合は違いはありませんが、分割して実行している場合は違いがあります。

    SET CONSTRAINTS ALL DEFERRED
    

    その場合あなたが探しているものです。制約はDEFERRABLEとしてマークする必要があることに注意してください それらが延期される前に。例:

    ALTER TABLE table_name
      ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
      DEFERRABLE INITIALLY IMMEDIATE;
    

    制約は、トランザクションまたは関数で次のように延期できます。

    CREATE OR REPLACE FUNCTION f() RETURNS void AS
    $BODY$
    BEGIN
      SET CONSTRAINTS ALL DEFERRED;
    
      -- Code that temporarily violates the constraint...
      -- UPDATE table_name ...
    END;
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    


    1. SQL DROP TABLE構文–DBMSによってリストされます

    2. postgresql日時に日数を追加する方法

    3. SQLiteNOTNULL制約

    4. XMLをCLOB列からXMLType列に変換するときにエラーが発生しました