Nehmen wir einige Beispiele für Tabellenvölker, die nur zwei Felder haben: id und data (json).
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Ich möchte eine Einschränkung für das Feld "pos" erstellen, die eindeutig sein muss. Ich habe über das Internet nach JSON-Einschränkungen gesucht, aber keine Ergebnisse.
Wie kann ich mit diesem Problem umgehen?
postgresql
json
unique-constraint
Chenko47
quelle
quelle
Antworten:
In erster Linie: Ich stimme sowohl den Kommentaren von @a_horse_with_no_name als auch @dezso zu: Sie sollten Ihre Daten normalisieren . JSON ist nicht dafür.
Wenn jedoch ein Grund, den ich nicht ergründen kann, dies wirklich zu einem Vorteil macht, ist es möglich:
Erstellen Sie einen Ausdruck basierend auf
UNIQUE INDEX
:Wenn Sie zu diesem Zeitpunkt versuchen, die folgenden Daten in Ihre Tabelle einzufügen (mit einer bereits vorhandenen - >> pos):
Sie erhalten dies als Antwort:
HINWEIS: Ich habe angenommen, dass dies
data.pos
immer eine Zeichenfolge sein wird. Wenn Sie verallgemeinern möchten, können Sie( (data->'pos') )
stattdessen verwenden. Sie würden dann einen JSON (B) -Ausdruck anstelle eines Textes indizieren. Überprüfen Sie die JSON-Funktionen und -Operatoren .quelle