Laut vorherigen Kommentaren sollte es ein Problem sein. Das heißt, es gibt einen Befehl, der möglicherweise das ist, wonach Sie suchen - er setzt die Einschränkungen auf verzögert, sodass sie bei COMMIT überprüft werden, nicht bei jedem Löschvorgang. Wenn Sie nur ein großes LÖSCHEN aller Zeilen machen, wird es keinen Unterschied machen, aber wenn Sie es in Teilen machen, wird es.
SET CONSTRAINTS ALL DEFERRED
ist das, was Sie in diesem Fall suchen. Beachten Sie, dass Einschränkungen als DEFERRABLE
gekennzeichnet sein müssen bevor sie verschoben werden können. Zum Beispiel:
ALTER TABLE table_name
ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
DEFERRABLE INITIALLY IMMEDIATE;
Die Einschränkung kann dann in einer Transaktion oder Funktion wie folgt zurückgestellt werden:
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;