Ist es möglich, eine benutzerdefinierte eindeutige Spalteneinschränkung wie folgt festzulegen? Angenommen, ich habe zwei Spalten subset
und type
beide Zeichenfolgen (obwohl die Datentypen wahrscheinlich keine Rolle spielen).
Wenn type
"wahr" ist, dann möchte ich die Kombination von type
und subset
einzigartig sein. Ansonsten gibt es keine Einschränkung. Ich benutze PostgreSQL 8.4 unter Debian.
postgresql
index
constraint
unique-constraint
postgresql-8.4
Faheem Mitha
quelle
quelle
Antworten:
Mit anderen Worten, Sie möchten
subset
eindeutig sein, wenntype = 'true'
.Ein partieller eindeutiger Index wird dies tun:
Auf diese Weise können Sie sogar Kombinationen mit
NULL
unique erstellen, was ansonsten nicht möglich ist - wie in dieser verwandten Antwort beschrieben:PostgreSQL-Mehrspalten-Unique-Constraint und NULL-Werte
quelle
Dies ist eine Ergänzung zu Erwins Antwort oben, aber PostgreSQL unterstützt eine Reihe von Indextypen. Diese schließen sich in der Regel nicht aus. Sie können sich das vorstellen als:
All dies kann auf verschiedene Arten kombiniert werden. Alles, was Sie hier tun, ist die Verwendung der eindeutigen und partiellen Funktionen, sodass Sie partielle eindeutige Indizes erhalten (die, wie Sie herausfinden, äußerst nützlich sind.
Angenommen, Sie möchten für das Teilmengenfeld einen Index ohne Berücksichtigung der Groß- und Kleinschreibung verwenden , bei dem der Typ wahr ist. Dann würden Sie eine funktionale Definition hinzufügen:
Beachten Sie, dass dadurch ein eindeutiger Index für die Ausgabe der Funktion lower () erstellt wird, die für das Attribut subset aufgerufen wird, bei dem type true ist.
quelle