Для PostgreSQL 9.3 подготовлены полноценные средства для работы с JSON

В состав находящейся в разработке ветки СУБД PostgreSQL 9.3 включен набор средств для обработки данных в формате JSON. Если в ветке PostgreSQL 9.2 появилась поддержка типа данных JSON, обеспечивающего хранение данных в согласованном виде, то в PostgreSQL 9.3 появятся встроенные средства для преобразования и манипуляции данными в формате JSON. Новые возможности можно разделить на две категории:

Функции для генерации данных в формате JSON из данных в других форматах: json_agg, to_json, hstore_to_json и hstore_to_json_loose; postgres=# create table aa (a bool, b text); CREATE TABLE postgres=# INSERT INTO aa VALUES (true, 'Hello «Darling»'); INSERT 0 1 postgres=# INSERT INTO aa VALUES (false, NULL); INSERT 0 1 postgres=# SELECT to_json (a) AS bool_json, to_json (b) AS txt_json FROM aa; bool_json | txt_json -----------±-------------------- true | «Hello \«Darling\» false | (2 rows) postgres=# SELECT json_agg (aa) FROM aa; json_agg --------------------------------------- [{«a»: true, «b»: «Hello \«Darling\»}, + {«a»: false, «b»: null}] (1 row) postgres=# CREATE TABLE aa (id int, txt hstore); CREATE TABLE postgres=# INSERT INTO aa VALUES (1, 'f1=>t, f2=>2, f3=>«Hi», f4=>NULL'); INSERT 0 1 postgres=# SELECT id, txt: json, hstore_to_json (txt) FROM aa; id | txt | hstore_to_json ----±----------------------------------±------------------------------- 1 | {«f1»: «t», «f2»:»2», «f3»: «Hi», «f4»: null} | {«f1»: «t», «f2»:»2», «f3»: «Hi», «f4»: null} (1 row)   Встроенные операторы и функции для обработки JSON-данных, позволяющие извлекать поля, менять отдельные значения, создавать записи на основе JSON-данных. В частности, для извлечения содержимого элементов JSON добавлены операторы »→»,»→>»,»#>» и »#>>». postgres=# SELECT b→>'f3' AS f1 FROM aa WHERE a = 1; f1 ---------------- Hi I’m «Daisy» (1 row) postgres=# SELECT b→'f3' AS f1 FROM aa WHERE a = 1; f1 -------------------- «Hi I’m \«Daisy\» (1 row) Для тех, кто желает начать использовать новые возможности не дожидаясь выхода PostgreSQL 9.3, указанные функции портированы для PostgreSQL 9.2 и опубликованы в форме внешнего дополнения.

©  OpenNet