पहले कुछ इस तरह से FK से छुटकारा पाएं:
alter table address drop constraint address_person_id_fkey
अगर वह शिकायत करता है कि कोई address_person_id_fkey
नहीं है बाधा तब \d address;
. का उपयोग करें psql
. में यह पता लगाने के लिए कि FK क्या कहलाता है।
फिर इस तरह के एक साधारण ट्रिगर को चाल चलनी चाहिए:
create or replace function pseudo_fk_for_address() returns trigger as $$
begin
if not exists(select 1 from person where id = new.person_id) then
raise exception 'No such person: %', new.person_id;
end if;
return new;
end;
$$ language plpgsql;
और इसे इस तरह संलग्न करें:
प्रत्येक पंक्ति निष्पादन प्रक्रिया के लिए पते पर डालने या अपडेट करने से पहलेcreate trigger pseudo_fk_for_address_trigger before insert or update on address
for each row execute procedure pseudo_fk_for_address();
फिर आपको इस तरह की त्रुटि मिलेगी यदि आप किसी ऐसे व्यक्ति के लिए पता जोड़ने का प्रयास करते हैं जो person
में मौजूद नहीं है (इससे प्राप्त होने वाली तालिकाओं सहित):
playpen=> insert into address (person_id, email, country, citycode, city, addressline) values (3, 'ab', 'b', 2, 'c', 'd');
ERROR: No such person: 3
आप person
. में DELETE ट्रिगर से पहले एक जोड़ना चाहेंगे लटकने वाले संदर्भों से बचने के लिए, मूल संरचना काफी समान होगी। आप address.person_id
. पर एक अनुक्रमणिका चाहते हैं DELETE ट्रिगर से पहले का भी समर्थन करने में मदद करने के लिए।
संदर्भ: