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