Поле JSON vs TEXT для хранения списка значений в Postgres
Каков наилучший способ сохранить следующее на Postgres?
[{'property':'foo1', 'val': "foo_val"}, {'property': 'foo2', 'val': "foo_val2"}]
JSON или текст?
Из того, что я понимаю, JSON хорош для вложенной структуры (используя ->>). Но в данном случае это плоская структура. Будет ли еще иметь смысл сохранять его в формате JSON или TEXT. Который будет проще запрашивать?
1 ответ
Я бы пошел с JSON
для не вложенных структур в любом случае. Postgres поддерживает операторы для получения, сравнения, удаления пар ключ / значение или целых объектов. Пожалуйста, прочитайте далее о JSONB
как это может быть лучше для вашего случая использования, особенно если вы планируете выполнять операции с базой данных со значением json, а также хотите индексировать определенные ключи.
Вы не можете просто написать запрос, чтобы соответствовать значению ключа, когда вы сохраняете json как TEXT
, но вы можете сделать это, используя встроенные операторы и функции json, и есть еще много вещей, которые вы можете сделать с ним. В качестве примера вы не можете получить foo_val2
как значение некоторого ключа, потому что строка не имеет пар ключ-значение, это весь текст.
Трудным путем я понял, что, например, нет оптимизации для оператора локализации. LIKE
, так что вам все равно нужно будет распаковать json в текст, а затем выполнить поиск - см. мой вопрос по Stackru по этой теме.
Подводя итог, JSON
или же JSONB
должен быть вашим первым выбором при работе с данными JSON, потому что это дает вам гибкость, которую вы не имеете с TEXT
, Особенно, если вы планируете делать какую-то работу на стороне базы данных, или если вы захотите это сделать.