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

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

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

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

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

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

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

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

6.1.68. CREATE LANGUAGE

6.1.68. CREATE LANGUAGE

CREATE LANGUAGE — создание нового процедурного языка

Синтаксис

CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name
    HANDLER call_handler [ INLINE inline_handler ] [ VALIDATOR valfunction ]
CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE name

Описание

Команда CREATE LANGUAGE регистрирует новый процедурный язык в базе данных Digital Q.DataBase. Впоследствии функции и процедуры могут быть определены на этом новом языке.

CREATE LANGUAGE фактически связывает имя языка с функциями-обработчиками, которые отвечают за выполнение функций, написанных на этом языке. Дополнительную информацию об обработчиках языков см. в разделе Глава 7.6.

Команда CREATE OR REPLACE LANGUAGE либо создаст новый язык, либо заменит существующее определение. Если язык уже существует, его параметры обновляются в соответствии с командой, но владение языком и настройки разрешений не меняются, и предполагается, что любые существующие функции, написанные на этом языке, по-прежнему действительны.

Для регистрации нового языка или изменения параметров существующего языка необходимо иметь привилегию суперпользователя Digital Q.DataBase. Однако после создания языка можно назначить владельцем его не-суперпользователя, который затем может удалить его, изменить его разрешения, переименовать или назначить нового владельца. (Однако не назначайте владельцем лежащих в основе функций на C не-суперпользователя; это создаст путь повышения привилегий для этого пользователя.)

Форма CREATE LANGUAGE, которая не предоставляет никакую функцию-обработчик, устарела. Для обратной совместимости со старыми файлами дампа она интерпретируется как CREATE EXTENSION. Это будет работать, если язык упакован в расширение с тем же именем, что является стандартным способом настройки процедурных языков.

Параметры

TRUSTED

TRUSTED указывает, что язык не предоставляет доступ к данным, к которым пользователь иначе не имел бы доступа. Если это ключевое слово опущено при регистрации языка, только пользователи с привилегией суперпользователя Digital Q.DataBase могут использовать этот язык для создания новых функций.

PROCEDURAL

Это слово-заполнитель.

name

Имя нового процедурного языка. Имя должно быть уникальным среди языков в базе данных.

HANDLER call_handler

call_handler — это имя ранее зарегистрированной функции, которая будет вызываться для выполнения функций процедурного языка. Обработчик вызовов для процедурного языка должен быть написан на компилируемом языке, таком как C, с соглашением о вызовах версии 1 и зарегистрирован в Digital Q.DataBase как функция, не принимающая аргументов и возвращающая тип language_handler, тип-заполнитель, который просто используется для идентификации функции как обработчика вызовов.

INLINE inline_handler

inline_handler — это имя ранее зарегистрированной функции, которая будет вызываться для выполнения анонимного блока кода (команды DO) на этом языке. Если функция inline_handler не указана, язык не поддерживает анонимные блоки кода. Функция-обработчик должна принимать один аргумент типа internal, который будет внутренним представлением команды DO, и обычно возвращать void. Возвращаемое значение обработчика игнорируется.

VALIDATOR valfunction

valfunction — это имя ранее зарегистрированной функции, которая будет вызываться при создании новой функции на этом языке для проверки новой функции. Если функция-валидатор не указана, новая функция не будет проверяться при создании. Функция-валидатор должна принимать один аргумент типа oid, который будет OID создаваемой функции, и обычно возвращать void.

Функция-валидатор обычно проверяет тело функции на синтаксическую корректность, но также может проверять другие свойства функции, например, может ли язык обрабатывать определённые типы аргументов. Чтобы сигнализировать об ошибке, функция-валидатор должна использовать функцию ereport(). Возвращаемое значение функции игнорируется.

Примечания

Используйте DROP LANGUAGE для удаления процедурных языков.

Системный каталог pg_language (см. Раздел 7.2.29) записывает информацию о текущих установленных языках. Также команда psql \dL выводит список установленных языков.

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

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

Примеры

Минимальная последовательность для создания нового процедурного языка:

CREATE FUNCTION plsample_call_handler() RETURNS language_handler
    AS '$libdir/plsample'
    LANGUAGE C;
CREATE LANGUAGE plsample
    HANDLER plsample_call_handler;

Обычно это записывается в скрипте создания расширения, и пользователи делают следующее для установки расширения:

CREATE EXTENSION plsample;

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

CREATE LANGUAGE является расширением Digital Q.DataBase.

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

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