PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

CONSTRAINT para verificar valores de uma tabela relacionada remotamente (via join etc.)


CHECK restrições não podem fazer referência a outras tabelas no momento. O manual:

Atualmente, CHECK expressões não podem conter subconsultas nem fazer referência a variáveis ​​que não sejam colunas da linha atual.

Uma maneira é usar um gatilho como demonstrado por @Wolph.

Uma solução limpa sem acionadores :adicione colunas redundantes e inclua-as em FOREIGN KEY restrições , que são a primeira escolha para impor a integridade referencial. Resposta relacionada no dba.SE com instruções detalhadas:
  • Aplicando restrições "duas mesas de distância"

Outra opção seria "falsificar" um IMMUTABLE função fazendo a verificação e use isso em um CHECK limitação. O Postgres permitirá isso, mas esteja ciente de possíveis ressalvas. Melhor tornar isso um NOT VALID limitação. Ver:
  • Desabilite todas as restrições e verificações de tabela ao restaurar um dump