Давайте рассмотрим несколько примеров таблиц людей, которые получили только 2 поля: id и data (json).
SELECT data FROM peoples ;
{"name": "Adam","pos":"DBA","age":22 }
{"name": "Alice","pos":"Security","age":33 }
{"name": "Bob","pos":"Manager","age":42 }
Я хочу создать ограничение для поля "pos", которое должно быть уникальным. Я искал в интернете ограничения JSON, но безрезультатно.
Как я могу справиться с этой проблемой?
postgresql
json
unique-constraint
Chenko47
источник
источник
Ответы:
Прежде всего: я согласен с комментариями @a_horse_with_no_name и @dezso: вы должны нормализовать свои данные . JSON не для этого.
Однако, если какая-то причина, которую я не могу понять, действительно делает это преимуществом, это возможно:
Создайте выражение на основе
UNIQUE INDEX
:Если в этот момент вы попытаетесь вставить следующий фрагмент данных в вашу таблицу (с уже существующим - >> pos):
Вы получите это в ответ:
ПРИМЕЧАНИЕ. Я предполагал, что
data.pos
это всегда будет строка. Если вы хотите обобщить, вы можете использовать( (data->'pos') )
вместо этого. Затем вы должны индексировать выражение JSON (B) вместо текста. Проверьте JSON функции и операторы .источник