Volgens eerdere opmerkingen zou het een probleem moeten zijn. Dat gezegd hebbende, is er een commando waar je naar op zoek bent - het stelt de beperkingen in op uitgesteld, zodat ze worden gecontroleerd op COMMIT, niet bij elke verwijdering. Als je maar één grote DELETE van alle rijen doet, maakt het geen verschil, maar als je het in stukjes doet, zal het wel.
SET CONSTRAINTS ALL DEFERRED
is wat je zoekt in dat geval. Houd er rekening mee dat beperkingen moeten worden gemarkeerd als DEFERRABLE
voordat ze kunnen worden uitgesteld. Bijvoorbeeld:
ALTER TABLE table_name
ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
DEFERRABLE INITIALLY IMMEDIATE;
De beperking kan dan als volgt worden uitgesteld in een transactie of functie:
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;