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;