Ich möchte eine Einschränkung hinzufügen, die die Eindeutigkeit einer Spalte nur in einem Teil einer Tabelle erzwingt.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
Der WHERE
obige Teil ist Wunschdenken.
Wie geht das? Oder sollte ich zum relationalen Zeichenbrett zurückkehren?
postgresql
constraints
unique-constraint
EoghanM
quelle
quelle
Antworten:
PostgreSQL definiert keine partielle (dh bedingte)
UNIQUE
Einschränkung. Sie können jedoch einen partiellen eindeutigen Index erstellen . PostgreSQL verwendet eindeutige Indizes, um eindeutige Einschränkungen zu implementieren. Der Effekt ist also der gleiche. Sie sehen die darin aufgeführte Einschränkung einfach nichtinformation_schema
.Siehe Teilindizes .
quelle
ERROR: duplicate key value violates unique constraint "stop_myc"
Es wurde bereits gesagt, dass PG keine partielle (dh bedingte) EINZIGARTIGE Einschränkung definiert. Die Dokumentation besagt auch, dass die bevorzugte Methode zum Hinzufügen einer eindeutigen Einschränkung zu einer Tabelle
ADD CONSTRAINT
eindeutige Indizes istEs gibt eine Möglichkeit, es mithilfe von Ausschlussbeschränkungen zu implementieren (danke @dukelion für diese Lösung).
In deinem Fall wird es so aussehen
quelle