Pertama-tama singkirkan FK dengan sesuatu seperti ini:
alter table address drop constraint address_person_id_fkey
Jika itu mengeluh tentang tidak adanya address_person_id_fkey
kendala kemudian gunakan \d address;
di psql
untuk mengetahui apa itu FK.
Maka pemicu sederhana seperti ini akan berhasil:
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;
Dan lampirkan seperti ini:
create trigger pseudo_fk_for_address_trigger before insert or update on address
for each row execute procedure pseudo_fk_for_address();
Kemudian Anda akan mendapatkan kesalahan seperti ini jika Anda mencoba menambahkan alamat untuk seseorang yang tidak ada di person
(termasuk tabel yang mewarisinya):
playpen=> insert into address (person_id, email, country, citycode, city, addressline) values (3, 'ab', 'b', 2, 'c', 'd');
ERROR: No such person: 3
Anda ingin menambahkan pemicu SEBELUM DELETE ke person
untuk menghindari referensi yang menggantung, struktur dasarnya akan hampir sama. Anda mungkin menginginkan indeks di address.person_id
untuk membantu mendukung pemicu BEFORE DELETE juga.
Referensi: