jsonb_plpythonu
Трансформация для типа jsonb в структуру PL/Pythonu.
Связанные компоненты: plpythonu.
Схема размещения:
ext
.Модуль реализует трансформации (преобразование) для типа
jsonb
в структуру недоверенного (untrusted) PL/Python.Типы
json
предназначены для хранения данных в формате JSON
(JavaScript Object Notation, запись объекта JavaScript) согласно стандарту RFC 7159.Типы
jsonb
предназначены для хранения данных в формате JSONB
, который представляет собой бинарное представление данных в формате JSON
.В общем случае такие данные можно хранить в текстовом формате, но применение типов
JSON
(JSONB
) дает возможность проверять вводимое значение на соответствие формату JSON
(JSONB
).Модуль
jsonb_plpythonu
является одним из дополнительных расширений для различных процедурных языков.Расширения для недоверенных (untrusted) PL/Python:
- jsonb_plpythonu – PL/Python;
- jsonb_plpython2u – PL/Python 2;
- jsonb_plpython3u – PL/Python 3.
При использовании расширений значения
jsonb
отображаются в соответствующие структуры Python:- массивы;
- хеши;
- скаляры.
Сравнение типов с точки зрения эффективности:
Параметр | json | jsonb |
---|---|---|
Cохраняет точную копию введенного текста | Да | В разобранном двоичном формате |
Скорость ввода | Высокая | Низкая из-за разбора |
Скорость обработки | Низкая из-за необходимости разбирать заново при каждом выполнении запроса | Высокая |
Поддержка индексации | Нет | Да |
Ниже приведены несколько примеров для понимания различий в работе типов:
-
значение
JSON
вводится и затем выводится без дополнительной обработки, выводит тот же текст, что поступил на вход:SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;
Пример вывода результата:Раскрыть type=sqljson ------------------------------------------------- {"bar": "baz", "balance": 7.77, "active":false} (1 row)
-
jsonb
не сохраняет семантически незначащие детали, такие как пробелы:SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb;
Пример вывода результата:Раскрыть type=sqljsonb -------------------------------------------------- {"bar": "baz", "active": false, "balance": 7.77} (1 row)
-
с
jsonb
числа выводятся по правилам нижележащего типаnumeric
:SELECT '{"reading": 4.230e-6}'::json, '{"reading": 4.230e-6}'::jsonb;
Пример вывода результата:Раскрыть type=sqljson | jsonb -----------------------+-------------------------- {"reading": 4.230e-6} | {"reading": 0.000004230} (1 row)
Дополнительную информацию по поставляемому модулю jsonb_plpythonu можно получить по ссылке.
Описание специальных функций и операторов для работы с типами
JSON
(JSONB
): https://www.postgresql.org/docs/13/functions-json.html.