jsonb_plpython3u. Трансформация для типа jsonb в структуру PL/Python3u
В исходном дистрибутиве установлено по умолчанию: нет.
Связанные компоненты: plpython3u.
Схема размещения:
ext.
Расширение вынесено в часть дистрибутива «untrusted». Подробное описание решения представлено в разделе «Информация по Untrusted-расширениям» документа «Руководство по установке».
Модуль реализует трансформации (преобразование) для типа jsonb в структуру недоверенного (untrusted) PL/Python3.
Типы json предназначены для хранения данных в формате JSON (JavaScript Object Notation, Запись объекта JavaScript) согласно стандарту RFC 7159.
Типы jsonb предназначены для хранения данных в формате JSONB, который представляет собой бинарное представление данных в формате JSON.
В общем случае такие данные можно хранить в текстовом формате, но применение типов JSON/JSONB дает возможность проверять вводимое значение на соответствие формату JSON/JSONB.
Описание специальных функций и операторов для работы с типами JSON/JSONB: https://www.postgresql.org/docs/15/functions-json.html
Модуль jsonb_plpython3u является одним из дополнительных расширений для различных процедурных языков.
Расширение для недоверенных (untrusted) PL/Python: jsonb_plpython3u – PL/Python 3.
При использовании расширений значения jsonb отображаются в соответствующие структуры Python:
- массивы;
- хеши;
- скаляры.
Сравнение типов с точки зрения эффективности:
| Параметр | json | jsonb |
|---|---|---|
| Cохраняет точную копию введенного текста | Да | В разобранном двоичном формате |
| Скорость ввода | Высокая | Низкая из-за разбора |
| Скорость обработки | Низкая из-за необходимости разбирать заново при каждом выполнении запроса | Высокая |
| Поддержка индексации | Нет | Да |
Полное описание типов JSON в данной документации не приводится.
Подробное описание типов json/jsonb/jsonpath (синтаксис, проверки, вхождения, трансформации) представлено в официальной документации: https://www.postgresql.org/docs/15/datatype-json.html#id-1.5.7.22.20
Доработка
Доработка не проводилась.
Ограничения
Ограничения отсутствуют.
Установка
Обозначения
Далее в примерах команд будут использоваться следующие обозначения:
{OS}– наименование операционной системы и ее версия;{product_version}– версия продукта (текущая версия: 7.3.1);{base_version}– базовая версия продукта (текущая: 7).
Необходима предварительная установка связанного расширения plpython3u или использовать предложение CASCADE.
Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных.
-
Установите rpm/deb-пакет расширения, в зависимости от окружения:
- SberLinux, РЕД ОС, CentOS
- Astra Linux
- Альт СП
sudo dnf install pangolin-dbms-{base_version}-jsonb-plpython3-7.3.1-{OS}.x86_64.rpmsudo apt install pangolin-dbms-{base_version}-jsonb-plpython3-7.3.1_amd64.debsudo apt-get install pangolin-dbms-{base_version}-jsonb-plpython3-7.3.1-{OS}.x86_64.rpmПодсказкаПример заполненной команды:
cd distributive
tar -xzf untrusted/untrusted.tar.gz -C untrusted/
sudo dnf -y install untrusted/pangolin-dbms-7-jsonb-plpython3-7.3.1-sberlinux9.x86_64.rpm -
Подключиться к БД, в которой необходимо зарегистрировать расширение.
-
Выполните активацию расширения с помощью команды:
CREATE EXTENSION jsonb_plpython3u CASCADE SCHEMA ext;
Отключение
Для отключения расширения необходимо его удалить.
-
Подключиться к БД, в которой зарегистрировано расширение.
-
Выполните отключение расширения с помощью команды:
DROP EXTENSION jsonb_plpython3u CASCADE; -
Удалите rpm/deb-пакет с расширением.
Настройка
Настройка не требуется.
Использование модуля
Подробное описание типов json/jsonb/jsonpath (синтаксис, проверки, вхождения, трансформации) представлено в официальной документации: https://www.postgresql.org/docs/15/datatype-json.html#id-1.5.7.22.20
Ниже приведены несколько примеров для понимания различий в работе типов:
-
значение
JSONвводится и затем выводится без дополнительной обработки, выводит тот же текст, что поступил на вход:SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::json;Пример вывода результата:
json
-------------------------------------------------
{"bar": "baz", "balance": 7.77, "active":false}
(1 row) -
jsonbне сохраняет семантически незначащие детали, например, пробелы:SELECT '{"bar": "baz", "balance": 7.77, "active":false}'::jsonb;Пример вывода результата:
jsonb
--------------------------------------------------
{"bar": "baz", "active": false, "balance": 7.77}
(1 row) -
с
jsonbчисла выводятся по правилам нижележащего типаnumericSELECT '{"reading": 4.230e-6}'::json, '{"reading": 4.230e-6}'::jsonb;Пример вывода результата:
json | jsonb
-----------------------+--------------------------
{"reading": 4.230e-6} | {"reading": 0.000004230}
(1 row)
Ссылки на документацию разработчика
Дополнительно поставляемый модуль jsonb_plpython3u: https://www.postgresql.org/docs/15/datatype-json.html#id-1.5.7.22.20;
Описание специальных функций и операторов для работы с типами JSON/JSONB: https://www.postgresql.org/docs/15/functions-json.html.