पिछली टिप्पणियों के अनुसार, यह एक समस्या होनी चाहिए। उस ने कहा, एक ऐसा आदेश है जो आप जो खोज रहे हैं वह हो सकता है - यह बाधाओं को स्थगित करने के लिए सेट करेगा, इसलिए उन्हें COMMIT पर चेक किया गया है, प्रत्येक डिलीट पर नहीं। यदि आप सभी पंक्तियों में से केवल एक बड़ा DELETE कर रहे हैं, तो इससे कोई फ़र्क नहीं पड़ेगा, लेकिन यदि आप इसे टुकड़ों में कर रहे हैं, तो यह होगा।
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;