Я ищу некоторые документы и / или примеры для новых функций JSON в PostgreSQL 9.2.
В частности, учитывая ряд записей JSON:
[
{name: "Toby", occupation: "Software Engineer"},
{name: "Zaphod", occupation: "Galactic President"}
]
Как бы я написал SQL, чтобы найти запись по имени?
В ванильном SQL:
SELECT * from json_data WHERE "name" = "Toby"
Официальное руководство разработчика довольно мало:
- http://www.postgresql.org/docs/devel/static/datatype-json.html
- http://www.postgresql.org/docs/devel/static/functions-json.html
Обновить я
Я собрал суть, детализирующую, что в настоящее время возможно с PostgreSQL 9.2 . Используя некоторые пользовательские функции, можно делать такие вещи, как:
SELECT id, json_string(data,'name') FROM things
WHERE json_string(data,'name') LIKE 'G%';
Обновление II
Теперь я переместил свои функции JSON в их собственный проект:
PostSQL - набор функций для преобразования PostgreSQL и PL / v8 в совершенно потрясающее хранилище документов JSON
sql
json
postgresql
postgresql-9.2
postgresql-9.3
Тоби хеде
источник
источник
Ответы:
Postgres 9.2
Я цитирую Эндрю Данстана в списке pgsql-хакеров :
Не мешает ему привести пример реализации в PLV8, который должен решить вашу проблему.
Postgres 9,3
Предлагает арсенал новых функций и операторов для добавления «json-processing».
Ответ на оригинальный вопрос в Postgres 9.3:
Расширенный пример:
Для больших таблиц вы можете добавить индекс выражения для увеличения производительности:
Postgres 9,4
Добавляет
jsonb
(b для «двоичного», значения хранятся как родные типы Postgres) и еще больше функциональности для обоих типов. В дополнение к индексам выражений, упомянутым выше,jsonb
также поддерживаются индексы GIN, btree и hash , причем GIN является наиболее мощным из них.json
иjsonb
типам данных и функциям .Руководство идет так далеко, что предлагает:
Жирный акцент мой.
Производительность выигрывает от общего улучшения индексов GIN.
Postgres 9,5
Полные
jsonb
функции и операторы. Добавьте больше функций для управленияjsonb
на месте и для отображения.источник
С Postgres 9.3+ просто используйте
->
оператор. Например,SELECT data->'images'->'thumbnail'->'url' AS thumb FROM instagram;
см. http://clarkdave.net/2013/06/what-can-you-do-with-postgresql-and-json/ для некоторых хороших примеров и учебного пособия.
источник
data
с документом JSON:{images:{thumbnail:{url:'thumbnail.jpg'}}}
. Дайте нам знать, как выглядят ваши данные и какой запрос не выполняется.SELECT data->'%'->'thumbnail'->'url' AS thumb FROM instagram;
::json
как описано в других сообщениях. Также обратите внимание, что->
оператор выдаст ошибку, если вы попытаетесь получить доступ к несуществующему свойству (т. Е. Если вы пошатнулись JSON):ERROR: column "jsonPropertyYouWant" does not exist
В Postgres 9.3 используйте -> для доступа к объекту. 4 примера
seed.rb
рельсы с
возвращается
Вы можете продолжить вложение
возвращение
источник