Според предишни коментари би трябвало да е проблем. Въпреки това има команда, която може да е това, което търсите - тя ще зададе ограниченията на отложени, така че да се проверяват при COMMIT, а не при всяко изтриване. Ако правите само едно голямо ИЗТРИВАНЕ на всички редове, няма да има разлика, но ако го правите на парчета, ще стане.
SET CONSTRAINTS ALL DEFERRED
е това, което търсите в такъв случай. Имайте предвид, че ограниченията трябва да бъдат маркирани като DEFERRABLE
преди да могат да бъдат отложени. Например:
ALTER TABLE table_name
ADD CONSTRAINT constraint_uk UNIQUE(column_1, column_2)
DEFERRABLE INITIALLY IMMEDIATE;
След това ограничението може да бъде отложено в транзакция или функция, както следва:
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;