×
Мы обрабатываем cookies, чтобы сделать наш сайт удобнее и персонализированнее для вас. Подробнее: политика использования «cookies» и «политики конфиденциальности».

Для самостоятельной настройки ознакомьтесь с инструкцией

Дополнительные настройки cookies в браузерах

Файлы cookie автоматически загружаются в ваш браузер при посещении веб-сайта. У вас есть возможность управлять этими файлами. Если Вы не согласны с использованием файлов cookies, запретите их сохранение на своём устройстве, удалите уже имеющиеся файлы cookies через настройки браузера или прекратите использование сайта.

При отключении обработки cookie наш сайт продолжит функционировать, однако будут использоваться исключительно необходимые технические файлы, без которых работа ресурса невозможна.

Инструкция по отключению cookies
Принять
Настроить
Отклонить

ДОКУМЕНТАЦИЯ

Выберите версию, форк и язык для СУБД Digital Q.DataBase, чтобы прочитать или скачать всю документацию.
Техподдержка
Документация
Диасофт
Авторские права © 2016–2025 ООО "Диасофт Экосистема"
Скачать всю документацию:

6.1.90. CREATE TRANSFORM

6.1.90. CREATE TRANSFORM

CREATE TRANSFORM — создание нового преобразования

Синтаксис

CREATE [ OR REPLACE ] TRANSFORM FOR type_name LANGUAGE lang_name (
    FROM SQL WITH FUNCTION from_sql_function_name [ (argument_type [, ...]) ],
    TO SQL WITH FUNCTION to_sql_function_name [ (argument_type [, ...]) ]
);

Описание

CREATE TRANSFORM определяет новое преобразование. CREATE OR REPLACE TRANSFORM либо создаст новое преобразование, либо заменит существующее определение.

Преобразование определяет, как адаптировать тип данных для процедурного языка. Например, при написании функции на PL/Python с использованием типа hstore, PL/Python заранее не знает, как представить значения hstore в окружении Python. Реализации языков обычно по умолчанию используют текстовое представление, но это неудобно, когда, например, ассоциативный массив или список был бы более подходящим.

Преобразование задаёт две функции:

  • Функция «from SQL» преобразует тип из окружения SQL в язык. Эта функция будет вызываться для аргументов функции, написанной на языке.

  • Функция «to SQL» преобразует тип из языка в окружение SQL. Эта функция будет вызываться для возвращаемого значения функции, написанной на языке.

Не обязательно предоставлять обе эти функции. Если одна не указана, будет использовано поведение по умолчанию для языка, если это необходимо. (Чтобы предотвратить преобразование в определённом направлении вообще, можно также написать функцию преобразования, которая всегда выдаёт ошибку.)

Чтобы иметь возможность создать преобразование, вы должны владеть типом и иметь привилегию USAGE на него, иметь привилегию USAGE на язык, а также владеть и иметь привилегию EXECUTE на функции from-SQL и to-SQL, если они указаны.

Параметры

type_name

Имя типа данных преобразования.

lang_name

Имя языка преобразования.

from_sql_function_name[(argument_type [, ...])]

Имя функции для преобразования типа из окружения SQL в язык. Она должна принимать один аргумент типа internal и возвращать тип internal. Фактический аргумент будет иметь тип преобразования, и функция должна быть написана соответственно. (Но объявлять функцию на уровне SQL, возвращающую internal, без хотя бы одного аргумента типа internal не разрешается.) Фактическое возвращаемое значение будет чем-то специфичным для реализации языка. Если список аргументов не указан, имя функции должно быть уникальным в её схеме.

to_sql_function_name[(argument_type [, ...])]

Имя функции для преобразования типа из языка в окружение SQL. Она должна принимать один аргумент типа internal и возвращать тип, который является типом преобразования. Фактическое значение аргумента будет чем-то специфичным для реализации языка. Если список аргументов не указан, имя функции должно быть уникальным в её схеме.

Примечания

Используйте DROP TRANSFORM для удаления преобразований.

Примеры

Чтобы создать преобразование для типа hstore и языка plpython3u, сначала настройте тип и язык:

CREATE TYPE hstore ...;

CREATE EXTENSION plpython3u;

Затем создайте необходимые функции:

CREATE FUNCTION hstore_to_plpython(val internal) RETURNS internal
LANGUAGE C STRICT IMMUTABLE
AS ...;

CREATE FUNCTION plpython_to_hstore(val internal) RETURNS hstore
LANGUAGE C STRICT IMMUTABLE
AS ...;

И, наконец, создайте преобразование, чтобы связать всё вместе:

CREATE TRANSFORM FOR hstore LANGUAGE plpython3u (
    FROM SQL WITH FUNCTION hstore_to_plpython(internal),
    TO SQL WITH FUNCTION plpython_to_hstore(internal)
);

На практике эти команды были бы упакованы в расширение.

Раздел contrib содержит ряд расширений, предоставляющих преобразования, которые могут служить реальными примерами.

Совместимость

Эта форма CREATE TRANSFORM является расширением Digital Q.DataBase. В стандарте SQL существует команда CREATE TRANSFORM, но она предназначена для адаптации типов данных к клиентским языкам. Такое использование не поддерживается Digital Q.DataBase.

Наверх
свяжитесь
с нами
контакты
Для прямой связи с нами вы можете использовать контакты ниже, либо оставить заявку через форму обратной связи, и мы обязательно свяжемся с вами

*поля обязательные к заполнению