PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

CONSTRAINT zum Überprüfen von Werten aus einer entfernt verwandten Tabelle (über Join usw.)

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