CHECK
Constraints können derzeit nicht auf andere Tabellen verweisen. Das Handbuch:
Derzeit CHECK
Ausdrücke dürfen weder Unterabfragen enthalten noch auf andere Variablen als die Spalten der aktuellen Zeile verweisen.
Eine Möglichkeit besteht darin, einen Trigger zu verwenden, wie von @Wolph demonstriert.
Eine saubere Lösung ohne Trigger :Redundante Spalten hinzufügen und in FOREIGN KEY
aufnehmen Einschränkungen , die die erste Wahl sind, um die referentielle Integrität zu erzwingen. Verwandte Antwort auf dba.SE mit detaillierter Anleitung:
- Durchsetzung von Beschränkungen „zwei Tische entfernt“
Eine andere Möglichkeit wäre, einen IMMUTABLE
zu "fälschen". Funktion die Überprüfung durchführen und diese in einem CHECK
verwenden Zwang. Postgres wird dies zulassen, aber seien Sie sich möglicher Vorbehalte bewusst. Machen Sie das am besten zu NOT VALID
Zwang. Siehe:
- Deaktivieren Sie alle Beschränkungen und Tabellenprüfungen, während Sie einen Dump wiederherstellen