Ifølge tidligere kommentarer burde det være et problem. Når det er sagt, er der en kommando, der kan være det, du leder efter - den vil sætte begrænsningerne til udskudt, så de er markeret på COMMIT, ikke ved hver sletning. Hvis du kun laver én stor SLETT af alle rækkerne, vil det ikke gøre en forskel, men hvis du gør det i stykker, vil det gøre det.
SET CONSTRAINTS ALL DEFERRED
er det du leder efter i så fald. Bemærk, at begrænsninger skal markeres som DEFERRABLE
før de kan udskydes. For eksempel:
ALTER TABLE table_name
ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
DEFERRABLE INITIALLY IMMEDIATE;
Begrænsningen kan derefter udskydes i en transaktion eller funktion som følger:
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;