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

कैस्केडिंग डिलीट से प्रभावित तालिकाओं को कैसे सूचीबद्ध करें

pg_depend का उपयोग करें . उदाहरण:

create table master (id int primary key);
create table detail_1 (id int, master_id int references master(id) on delete restrict);
create table detail_2 (id int, master_id int references master(id) on delete cascade);

select pg_describe_object(classid, objid, objsubid)
from pg_depend 
where refobjid = 'master'::regclass and deptype = 'n';

                  pg_describe_object
------------------------------------------------------
 constraint detail_1_master_id_fkey on table detail_1
 constraint detail_2_master_id_fkey on table detail_2
(2 rows)

deptype = 'n' मतलब:

<ब्लॉकक्वॉट>

निर्भरता सामान्य - अलग-अलग बनाई गई वस्तुओं के बीच एक सामान्य संबंध। आश्रित वस्तु को संदर्भित वस्तु को प्रभावित किए बिना गिराया जा सकता है। संदर्भित वस्तु को केवल CASCADE निर्दिष्ट करके छोड़ा जा सकता है, जिस स्थिति में आश्रित वस्तु को भी गिरा दिया जाता है।

pg_get_constraintdef() का उपयोग करें बाधा परिभाषाएँ प्राप्त करने के लिए:

select 
    pg_describe_object(classid, objid, objsubid), 
    pg_get_constraintdef(objid)
from pg_depend 
where refobjid = 'master'::regclass and deptype = 'n';


                  pg_describe_object                  |                       pg_get_constraintdef
------------------------------------------------------+------------------------------------------------------------------
 constraint detail_1_master_id_fkey on table detail_1 | FOREIGN KEY (master_id) REFERENCES master(id) ON DELETE RESTRICT
 constraint detail_2_master_id_fkey on table detail_2 | FOREIGN KEY (master_id) REFERENCES master(id) ON DELETE CASCADE
(2 rows)

कैस्केडिंग निर्भरता की पूरी श्रृंखला को खोजने के लिए हमें रिकर्सन का उपयोग करना चाहिए और कैटलॉग को देखना चाहिए pg_constraint id प्राप्त करने के लिए एक आश्रित तालिका का।

with recursive chain as (
    select classid, objid, objsubid, conrelid
    from pg_depend d
    join pg_constraint c on c.oid = objid
    where refobjid = 'the_table'::regclass and deptype = 'n'
union all
    select d.classid, d.objid, d.objsubid, c.conrelid
    from pg_depend d
    join pg_constraint c on c.oid = objid
    join chain on d.refobjid = chain.conrelid and d.deptype = 'n'
    )
select pg_describe_object(classid, objid, objsubid), pg_get_constraintdef(objid)
from chain;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मौजूदा ENUM प्रकार में एक नया मान जोड़ना

  2. व्याख्या विश्लेषण को कैसे समझें

  3. PostgreSQL:FATAL - उपयोगकर्ता के लिए पीयर प्रमाणीकरण विफल (PG::ConnectionBad)

  4. पोस्टग्रेज:सिंगल रो को मल्टीपल रो में कन्वर्ट करें (अनपिवोट)

  5. PostgreSQL के लिए ओपन सोर्स बैकअप प्रबंधन की वर्तमान स्थिति