मान लीजिए आपके पास ये दो टेबल हैं:
create table referenced (id integer primary key);
create table referencer (a integer references referenced (id));
तालिका संदर्भकर्ता संदर्भ तालिका संदर्भित:
=> \d referencer
Table "public.referencer"
Column | Type | Modifiers
--------+---------+-----------
a | integer |
Foreign-key constraints:
"referencer_a_fkey" FOREIGN KEY (a) REFERENCES referenced(id)
फिर आप दोनों में एक मान डालें:
insert into referenced values (1);
insert into referencer values (1);
select *
from
referenced rd
inner join
referencer rr on rd.id = rr.a
;
id | a
----+---
1 | 1
अब आप संदर्भ को on update cascade
. में बदलना चाहते हैं :
alter table referencer
drop constraint referencer_a_fkey,
add foreign key (a) references referenced (id) on update cascade;
और इसे अपडेट करें:
update referenced set id = 2;
select *
from
referenced rd
inner join
referencer rr on rd.id = rr.a
;
id | a
----+---
2 | 2
अब आपको संदर्भित तालिका प्राथमिक कुंजी में एक और समस्या होगी यदि अद्यतन आईडी पहले से मौजूद है। लेकिन इससे एक और सवाल खड़ा हो जाएगा।
अपडेट करें
यह खतरनाक है इसलिए पहले डीबी का बैकअप लें। इसे सुपरयूज़र के रूप में किया जाना चाहिए:
update pg_constraint
set confupdtype = 'c'
where conname in (
select
c.conname
from
pg_constraint c
inner join
pg_class referenced on referenced.oid = c.confrelid
where
referenced.relname = 'referenced'
and
c.contype = 'f'
);
यह संदर्भित तालिका पर सभी विदेशी कुंजी बाधाओं को on update cascade
. में बदल देगा