Комментарии 15
Отличные конкурентные приемущества. Теперь будем ждать поддержки json и jsonb в Node.js ORM-ках.
У меня построитель запросов knex.js, он уже умеет автоматом преобразовывать json в объект JS и наоборот, при выборке / обновлении соответственно.
На его базе построена ORM Bookshelf.js, я думаю, там как раз идёт имплементация выборок по json, либо всё уже есть. Так или иначе, всегда есть raw query.
На его базе построена ORM Bookshelf.js, я думаю, там как раз идёт имплементация выборок по json, либо всё уже есть. Так или иначе, всегда есть raw query.
Когда уже появится возможность авторефреша материализованных представлений…
Можете пояснить про null подробнее в json и jsonb? Их нельзя хранить или какие то другие ограничения (при создании запросов к полям н-р)?
>… Операторы @>,? и некоторые другие специфичны для типа jsonb
Довольно сомнительное решение — ведь JSON — это просто структура, но состоящая из таких же простых типов, как и другие колонки таблицы — зачем им нужен новый набор крючков? Достаточно парсеру запросов определить, что работают над JSONb полем и СТАНДАРТНЫЕ операторы использовать в новом контексте — EXIST, >, <, = и т.п.
Довольно сомнительное решение — ведь JSON — это просто структура, но состоящая из таких же простых типов, как и другие колонки таблицы — зачем им нужен новый набор крючков? Достаточно парсеру запросов определить, что работают над JSONb полем и СТАНДАРТНЫЕ операторы использовать в новом контексте — EXIST, >, <, = и т.п.
Мне кажется, что правильней именно отдельными операторами, чтобы не смешивать понятия. Так как EXISTS — это существование набора строк, < — меньше в сравнивании двух скаляров. Иначе прийдется в голове держать другой смысл для JSON-поля (и обращатся к структуре таблицы, чтобы посмотреть, что именно за операция и для чего применяется).
в последнем примере с security_barrier ноутис не лишний с секретной книгой?
Здравствуйте, у меня почему-то не видит тип данных jsonb, не встречали такое случаем? Пробовал и в консоли, и через php (pdo_pgsql), и программки различные. Вот запрос:
ERROR: type «jsonb» does not exist
Версия: psql (9.4beta3, сервер 9.3.5)
Если оставляю просто json — то соответственно таблица создается. Гугл мне отказывается отвечать.
CREATE TABLE book ( id serial NOT NULL, params jsonb NOT NULL DEFAULT '{}');
ERROR: type «jsonb» does not exist
Версия: psql (9.4beta3, сервер 9.3.5)
Если оставляю просто json — то соответственно таблица создается. Гугл мне отказывается отвечать.
Верно ли я понял, что на данное время существуют только возможность частичной выборки из json колонок (по имени ключей, индексам, пути), но изменение (alteration), допустим удаление/изменение отдельного элемента массива — нет?
Для формирования JSON из элемента, массива или записи предусмотрен ряд функций. Для установки некоторого поля в данных JSON подойдёт такая пользовательская функция:
Для операций с отдельным элементом массива можно придумать что-то аналогичное.
Скрытый текст
CREATE OR REPLACE FUNCTION fn_set_json_key ( v_data json, v_key text, v_value anyelement )
RETURNS json AS
$BODY$
SELECT coalesce
(
(
SELECT
(
'{' || string_agg ( to_json ( key ) || ':' || value, ',' ) || '}'
)
FROM
(
SELECT *
FROM json_each ( v_data )
WHERE key != v_key
UNION ALL
SELECT v_key, to_json ( v_value )
) AS fields
), '{}'
)::json;
$BODY$
LANGUAGE SQL IMMUTABLE;
Для операций с отдельным элементом массива можно придумать что-то аналогичное.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
PostgreSQL 9.4 Что нового?