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