PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgresQL में स्टैक गहराई सीमा पार हो गई (ट्रिगर हटाने के बाद)

अब तक आप तो यही होता है:

  1. बच्चा1 हटाएं.
  2. अभिभावक के विलोपन को ट्रिगर करता है।
  3. हटाता है n बच्चे1 के भाई-बहन DELETE CASCADE . द्वारा ।
  4. एक ही ट्रिगर को कॉल करता है n बार।
  5. कोई और भाई-बहन नहीं बचे हैं।

कोई अंतहीन लूप नहीं, लेकिन फिर भी 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 कोई भी बच्चा।

तेज़ भी होना चाहिए।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पोस्टग्रेज़ सभी स्तंभों का चयन करता है लेकिन एक स्तंभ द्वारा समूहित करता है

  2. क्या एक स्कीमा के साथ एकाधिक डेटाबेस का उपयोग करना बेहतर है, या एकाधिक स्कीमा वाले एक डेटाबेस का उपयोग करना बेहतर है?

  3. पोस्टग्रेज डेटाबेस में विशिष्ट समय क्षेत्र हैंडलिंग

  4. पोस्टग्रेस में सेट किए गए परिणाम का हैश कैसे उत्पन्न करें?

  5. .sql postgresql बैकअप से एकल तालिका को कैसे पुनर्स्थापित करें?