CHECK las restricciones actualmente no pueden hacer referencia a otras tablas. El manual:
Actualmente, CHECK las expresiones no pueden contener subconsultas ni referirse a variables que no sean columnas de la fila actual.
Una forma es usar un disparador como lo demostró @Wolph.
Una solución limpia y sin desencadenantes :agregue columnas redundantes e inclúyalas en FOREIGN KEY restricciones , que son la primera opción para hacer cumplir la integridad referencial. Respuesta relacionada en dba.SE con instrucciones detalladas:
- Hacer cumplir las restricciones "a dos mesas de distancia"
Otra opción sería "falsificar" un IMMUTABLE función haciendo la verificación y úsala en un CHECK restricción. Postgres lo permitirá, pero tenga en cuenta las posibles advertencias. Mejor haz que sea un NOT VALID restricción. Ver:
- Deshabilitar todas las restricciones y comprobaciones de tablas al restaurar un volcado