Для 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 и опубликованы в форме внешнего дополнения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.