Поле 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, Особенно, если вы планируете делать какую-то работу на стороне базы данных, или если вы захотите это сделать.

Другие вопросы по тегам