अब तक आप तो यही होता है:
- बच्चा1 हटाएं.
- अभिभावक के विलोपन को ट्रिगर करता है।
- हटाता है
n
बच्चे1 के भाई-बहनDELETE CASCADE
. द्वारा । - एक ही ट्रिगर को कॉल करता है
n
बार। - कोई और भाई-बहन नहीं बचे हैं।
कोई अंतहीन लूप नहीं, लेकिन फिर भी n
ट्रिगर का आह्वान। यह समझा सकता है कि आपकी स्टैक गहराई सीमा क्यों पार हो गई थी, लेकिन आप सीमा बढ़ाकर इसे ठीक कर सकते हैं। अधिक n
. के साथ फिर से ऐसा ही हो सकता है ।
एक विकल्प के रूप में, अपने ट्रिगर को इसके साथ बदलें:
CREATE OR REPLACE FUNCTION delete_family()
RETURNS TRIGGER AS
$func$
BEGIN
DELETE FROM child WHERE parent_id = OLD.parent_id;
DELETE FROM parent WHERE parent_id = OLD.parent_id; -- done after 1st call
RETURN NULL;
END
$func$ LANGUAGE plpgsql; -- don't quote the language name!
CREATE TRIGGER delete_family
AFTER DELETE ON child
FOR EACH ROW EXECUTE PROCEDURE delete_family();
और FK बाधा को बिना . के संस्करण से बदलें ON DELETE CASCADE
. कोड उदाहरण:
अब, DELETE
. के लिए एक पूरा परिवार, आप पहले की तरह माता-पिता को नहीं हटा सकते (अब FK द्वारा निषिद्ध)। इसके बजाय DELETE
कोई भी बच्चा।
तेज़ भी होना चाहिए।