Postgres 9.2
Преимущество новой функции в два раза. Столбцы типаjson
проверяют правильность его содержимого, поэтому в столбце автоматически указывается JSON, и вы получаете сообщение об ошибке, если пытаетесь записать в него что-то еще.
И у вас есть базовые функции для создания действительного JSON на лету из строк или массивов - что является очень распространенным вариантом использования.
Я цитирую Эндрю Данстана в списке pgsql-хакеров :
На каком-то этапе, возможно, будут некоторые функции обработки json (в отличие от создания json), но не в 9.2.
Я использовал эту цитату раньше под этим вопросом на SO .
Postgres 9,3
.. наконец, приносит ряд функций и операторов. Проверьте страницу руководства для функций JSON .
Соответствующий ответ на SO:
@ Подниму пост в блоге. Смотрите комментарий ниже.
Postgres 9,4
Не забудьте проверить новый jsonb
тип с множеством новых функций.
Прежде всего, разлагается, двоичное хранение позволяет меньшее хранение на диск и оператор равенства для jsonb
( в отличие от json
), что делает ряд дополнительных операций (например , возможный DISTINCT
или UNIQUE
индекс).
Еще больше функций было добавлено для обоих json
и jsonb
. json_to_record()
и json_to_recordset()
т.д. Подробнее в заметках о выпуске.
В двух словах, тип данных JSON (а также более старые расширение и тип HSTORE) позволяют использовать PostgreSQL в качестве хранилища данных «без схемы» (или объединять реляционные и нереляционные данные «без схемы») вместо необходимость прибегать к некоторым другим параметрам NoSQL (например, MongoDB). Вы даже получаете некоторые вещи, которые вы не можете сделать с MongoDB, такие как фильтруемая индексация, индексация выражений и т. Д. Единственным недостатком является то, что PostgreSQL не поддерживает разделение из коробки, как MongoDB ... однако я на самом деле вопрос, как часто шардинг действительно необходим. С хорошо сконфигурированной базой данных PostgreSQL 9.3, достаточными ресурсами O / S и некоторыми достаточно хорошо продуманными отфильтрованными индексами выражений вы легко сможете получить поиск строк без схемы в диапазоне 0,25 миллисекунды.
HTH, Дейв Сиск
источник
В основном я вижу три варианта использования здесь:
Первый может быть сделан непосредственно из PostgreSQL без необходимости в надстройках. Вы должны быть в состоянии сделать что-то вроде:
Затем его можно использовать для создания вложенных массивов и т. Д. В выходных данных и избежать множества проблем с синтаксическим анализом на стороне приложения.
вторая передает сложные данные в БД для обработки. В настоящее время нет встроенных функций, облегчающих это, но с такими дополнениями, как pl / v8js, вы можете программировать свою базу данных на Javascript и использовать json в качестве формата обмена. Это может позволить создание более богатых интерфейсов внутри вашей базы данных. Обратите внимание, что, поскольку вы можете индексировать выходные данные функции, вы можете использовать это для создания индексов аспектов JSON, которые будут храниться в вашей базе данных.
Третья - это область, в которой мы планируем использовать ее в LedgerSMB. Идея заключается в том, что мы можем позволить системным интеграторам хранить очень простую информацию вместе с учетными записями клиентов. Затем он может быть упакован в поле JSON, которое будет сохранено. Это не сможет быть напрямую запрошено основными приложениями, но если люди захотят добавить это с помощью pl / v8js, это может быть сделано для отдельных предприятий, использующих программное обеспечение.
источник