Jak utworzyć klucz obcy z ograniczeniem do przywoływanej tabeli w PostgreSQL
Załóżmy, że mam następujące tabele
CREATE TABLE plugins (
id int primary key,
type text);
insert into plugins values (1,'matrix');
insert into plugins values (2,'matrix');
insert into plugins values (3,'function');
insert into plugins values (4,'function');
CREATE TABLE matrix_params (
id int primary key,
pluginid int references plugins (id)
);
To wszystko działa zgodnie z oczekiwaniami, ale chciałbym dodać dodatkowe ograniczenie, że matrix_param może odnosić się tylko do pluginidu, który ma typ „matrix”. Więc
insert into matrix_params values (1,1);
Powinien odnieść sukces, ale
insert into matrix_params values (2,3);
Powinien zawieść.
Proste ograniczenie dla matrycy_params nie działa, ponieważ nie ma możliwości sprawdzenia, jaki jest odpowiedni typ w tabeli wtyczek.