Перейти к основному содержимому

jsonb_plpython3u. Трансформация для типа jsonb в структуру PL/Python3u

В исходном дистрибутиве установлено по умолчанию: нет.

Связанные компоненты: plpython3u.

Схема размещения: ext.

примечание

Расширение вынесено в часть дистрибутива «untrusted». Подробное описание решения представлено в разделе «Информация по Untrusted-расширениям» документа «Руководство по установке».

Модуль реализует трансформации (преобразование) для типа jsonb в структуру недоверенного (untrusted) PL/Python3.

Внимание!

:class: note Типы 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:

  • массивы;
  • хеши;
  • скаляры.

Сравнение типов с точки зрения эффективности:

Параметрjsonjsonb
Cохраняет точную копию введенного текстаДаВ разобранном двоичном формате
Скорость вводаВысокаяНизкая из-за разбора
Скорость обработкиНизкая из-за необходимости разбирать заново при каждом выполнении запросаВысокая
Поддержка индексацииНетДа
к сведению

Полное описание типов JSON в данной документации не приводится.

Подробное описание типов json/jsonb/jsonpath (синтаксис, проверки, вхождения, трансформации) представлено в официальной документации: https://www.postgresql.org/docs/15/datatype-json.html#id-1.5.7.22.20

Доработка

Доработка не проводилась.

Ограничения

Ограничения отсутствуют.

Установка

Обозначения

Далее в примерах команд будут использоваться следующие обозначения:

  • {OS} – наименование операционной системы и ее версия;
  • {product_version} – версия продукта (текущая версия: 6.7.6);
  • {base_version} – базовая версия продукта (текущая: 6).

Необходима предварительная установка связанного расширения plpython3u или использовать предложение CASCADE.

Модуль считается «доверенным», поэтому его могут устанавливать пользователи, имеющие право CREATE в текущей базе данных.

  1. Установите rpm/deb-пакет расширения, в зависимости от окружения:

    sudo dnf install pangolin-dbms-{base_version}-jsonb-plpython3-{product_version}-{OS}.x86_64.rpm
    Подсказка

    Пример заполненной команды:

       cd distributive
    tar -xzf untrusted/untrusted.tar.gz -C untrusted/
    sudo dnf -y install untrusted/pangolin-dbms-6-jsonb-plpython3-6.7.6-sberlinux8.x86_64.rpm
  2. Подключиться к БД, в которой необходимо зарегистрировать расширение.

  3. Выполните активацию расширения с помощью команды:

    CREATE EXTENSION jsonb_plpython3u CASCADE SCHEMA ext;

Отключение

Для отключения расширения необходимо его удалить.

  1. Подключиться к БД, в которой зарегистрировано расширение.

  2. Выполните отключение расширения с помощью команды:

    DROP EXTENSION jsonb_plpython3u CASCADE;
  3. Удалите 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 числа выводятся по правилам нижележащего типа numeric

    SELECT '{"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.