Enligt tidigare kommentarer borde det vara ett problem. Som sagt, det finns ett kommando som kan vara det du letar efter - det kommer att ställa in begränsningarna på uppskjutna så att de kontrolleras på COMMIT, inte vid varje radering. Om du bara gör en stor DELETE av alla rader kommer det inte att göra någon skillnad, men om du gör det i bitar kommer det att göra det.
SET CONSTRAINTS ALL DEFERRED
är vad du letar efter i så fall. Observera att begränsningar måste markeras som DEFERRABLE
innan de kan skjutas upp. Till exempel:
ALTER TABLE table_name
ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
DEFERRABLE INITIALLY IMMEDIATE;
Begränsningen kan sedan skjutas upp i en transaktion eller funktion enligt följande:
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;