Podle předchozích komentářů by to měl být problém. To znamená, že existuje příkaz, který může být tím, co hledáte - nastaví omezení na odložená, takže budou zkontrolována při COMMIT, nikoli při každém odstranění. Pokud uděláte jen jedno velké DELETE všech řádků, nebude to mít žádný vliv, ale pokud to uděláte po částech, bude.
SET CONSTRAINTS ALL DEFERRED
je to, co v tom případě hledáte. Všimněte si, že omezení musí být označena jako DEFERRABLE
než mohou být odloženy. Například:
ALTER TABLE table_name
ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
DEFERRABLE INITIALLY IMMEDIATE;
Omezení pak může být v transakci nebo funkci odloženo následovně:
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;