PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment créer une clé étrangère avec une contrainte sur la table référencée dans PostgreSQL

Vous pouvez utiliser une contrainte CHECK pour cela. Vous ne pouvez pas mettre une requête dans une contrainte CHECK mais vous pouvez appeler une fonction; donc, nous construisons une fonction simple qui nous dit si un pluginid est une matrice :

create or replace function is_matrix(int) returns boolean as $$
    select exists (
        select 1
        from plugins
        where id   = $1
          and type = 'matrix'
    );
$$ language sql;

et enveloppez cela dans une contrainte CHECK :

alter table matrix_params add constraint chk_is_matrix check (is_matrix(pluginid));

Ensuite :

=> insert into matrix_params values (1,1);
=> insert into matrix_params values (2,3);
ERROR:  new row for relation "matrix_params" violates check constraint "chk_is_matrix"

Et le FK s'occupe de l'intégrité référentielle et des cascades.