Быстрый старт
Развертывание
Моделирование данных
Подключение
Запись данных
Миграция
Запросы
Операции и обслуживание
Типовое обслуживание
Секционирование
Резервное копирование и восстановление
Масштабирование
Зеркалирование
Управление ресурсами
Безопасность
Мониторинг
Настройка производительности
Устранение неполадок
Справочник
Руководство по инструментам
Типы данных
Хранилище данных
Выполняющая система
Потоковая передача
Восстановление после сбоев
Конфигурация
Индексы
Расширения
Справочник по SQL
Часто задаваемые вопросы
Определяет новый процедурный язык.
CREATE [ OR REPLACE ] [ PROCEDURAL ] LANGUAGE <name>
CREATE [ OR REPLACE ] [ TRUSTED ] [ PROCEDURAL ] LANGUAGE <name>
HANDLER <call_handler>
[ INLINE <inline_handler> ]
[ VALIDATOR <valfunction> ]
Команда CREATE LANGUAGE регистрирует новый процедурный язык в базе данных. После этого функции и процедуры могут быть определены на этом языке.
Примечание!
Процедурные языки для Database реализованы как «расширения» и поэтому должны устанавливаться с помощью команды CREATE EXTENSION, а не CREATE LANGUAGE. Прямое использование команды CREATE LANGUAGE следует ограничить скриптами установки расширений. Если в вашей базе данных присутствует «простой» (не расширение) язык, возможно, в результате обновления, вы можете преобразовать его в расширение с помощьюCREATE EXTENSION <langname>FROM unpackaged.
Команда CREATE LANGUAGE фактически связывает имя языка с одной или несколькими функциями-обработчиками, которые отвечают за выполнение функций, написанных на этом языке.
Существует две формы команды CREATE LANGUAGE. В первой форме пользователь указывает только имя желаемого языка, а сервер Database обращается к системному каталогу pg_pltemplate, чтобы определить правильные параметры. Во второй форме пользователь указывает параметры языка вместе с его именем. Вторая форма может использоваться для создания языка, который не определён в pg_pltemplate, однако такой подход считается устаревшим.
Если сервер находит запись в каталоге pg_pltemplate для указанного имени языка, он будет использовать данные из этого каталога, даже если команда содержит параметры языка. Это поведение упрощает загрузку старых дампов, в которых, вероятно, содержится устаревшая информация о функциях поддержки языков.
Обычно пользователь должен обладать привилегией суперпользователя Database, чтобы зарегистрировать новый язык. Однако владелец базы данных может зарегистрировать новый язык в этой базе данных, если язык указан в каталоге pg_pltemplate и помечен как разрешённый для создания владельцами баз данных (атрибут tmpldbacreate имеет значение true). По умолчанию владельцы баз данных могут создавать доверенные языки, но это можно изменить суперпользователями путём редактирования содержимого pg_pltemplate. Создатель языка становится его владельцем и в дальнейшем может удалить его, переименовать или передать другому владельцу.
Команда CREATE OR REPLACE LANGUAGE либо создаёт новый язык, либо заменяет существующее определение. Если язык уже существует, его параметры обновляются в соответствии с указанными значениями или данными из pg_pltemplate, но владелец и права доступа к языку остаются без изменений, а все существующие функции, написанные на этом языке, считаются по-прежнему корректными. Помимо обычных требований к привилегиям при создании языка, пользователь должен быть суперпользователем или владельцем существующего языка. Случай с использованием REPLACE в основном предназначен для обеспечения существования языка. Если для языка есть запись в pg_pltemplate, то REPLACE фактически не изменит ничего в существующем определении, за исключением необычной ситуации, когда запись в pg_pltemplate была изменена после создания языка.
Примечание! Параметр
TRUSTEDи имена функций поддержки игнорируются, если сервер имеет запись для указанного имени языка вpg_pltemplate.
Для удаления процедурных языков используйте команду DROP LANGUAGE.
Информация об установленных языках хранится в системном каталоге pg_language. Кроме того, команда psql \dL выводит список установленных языков.
Чтобы создавать функции на процедурном языке, пользователь должен иметь привилегию USAGE для этого языка. По умолчанию для доверенных языков USAGE предоставляется PUBLIC (всем). Эту привилегию можно отозвать при необходимости.
Процедурные языки являются локальными для отдельных баз данных. Однако язык можно установить в базу данных template1, что обеспечит его автоматическое наличие во всех последующих базах данных.
Функция-обработчик вызова, функция-обработчик встроенного кода (если есть) и функция-валидатор (если есть) должны уже существовать, если в pg_pltemplate нет записи для данного языка. Но если запись есть, функции не обязаны существовать заранее; они будут автоматически определены, если отсутствуют в базе данных. (Это может привести к сбою команды CREATE LANGUAGE, если разделяемая библиотека, реализующая язык, недоступна в установке.)
Рекомендуемый способ создания любого стандартного процедурного языка — использовать CREATE EXTENSION вместо CREATE LANGUAGE. Например:
CREATE EXTENSION plperl;
Для языка, отсутствующего в каталоге pg_pltemplate, требуется следующая последовательность действий:
CREATE FUNCTION plsample_call_handler() RETURNS
language_handler
AS '$libdir/plsample'
LANGUAGE C;
CREATE LANGUAGE plsample
HANDLER plsample_call_handler;
CREATE LANGUAGE является расширением Database.
ALTER LANGUAGE, CREATE EXTENSION, CREATE FUNCTION, DROP LANGUAGE, GRANT, DO