Установка процедурных языков
Эта страница переведена при помощи нейросети GigaChat.
Процедурный язык должен быть «установлен» в каждую базу данных, где он будет использоваться. Но процедурные языки, установленные в базе данных template1
, автоматически доступны во всех последующих созданных базах данных, поскольку их записи в template1
будут скопированы с помощью CREATE DATABASE
. Таким образом, администратор базы данных может решить, какие языки доступны в каких базах данных и при желании сделать некоторые языки доступными по умолчанию.
Для языков, поставляемых со стандартным дистрибутивом, достаточно выполнить CREATE EXTENSION
language_name
для установки языка в текущую базу данных. Ручная процедура, описанная ниже, рекомендуется только для установки языков, которые не были упакованы в виде расширений.
Ручная установка процедурного языка
Процедурный язык устанавливается в базе данных за пять шагов, которые должны быть выполнены суперпользователем базы данных. В большинстве случаев необходимые команды SQL должны быть упакованы в виде сценария установки «расширения», чтобы их можно было выполнить с помощью CREATE EXTENSION
:
-
(ru-ru.XPLANG-INSTALL-CR1)= Общий объект для обработчика языка должен быть скомпилирован и установлен в соответствующий каталог библиотеки. Это работает так же, как сборка и установка модулей с обычными пользовательскими функциями на языке C; см. раздел «Компиляция и связывание динамически загружаемых функций». Часто обработчик языка зависит от внешней библиотеки, которая предоставляет сам движок программирования; если да, то его также необходимо установить.
-
(ru-ru.XPLANG-INSTALL-CR2)= Обработчик должен быть объявлен с помощью команды:
CREATE FUNCTION handler_function_name()
RETURNS language_handler
AS 'path-to-shared-object'
LANGUAGE C;Специальный тип возврата
language_handler
сообщает системе баз данных о том, что эта функция не возвращает один из определенных типов данных SQL и непосредственно не может использоваться в операторах SQL. -
(ru-ru.XPLANG-INSTALL-CR3)= Необязательно, обработчик языка может предоставить встроенную функцию обработчика «внедренного кода, которая выполняет анонимные блоки кода (DO команды), написанные на этом языке. Если для языка есть обработчик внедренного кода, объявите его такой командой:
CREATE FUNCTION inline_function_name(internal)
RETURNS void
AS 'path-to-shared-object'
LANGUAGE C; -
(ru-ru.XPLANG-INSTALL-CR4)= Кроме того, обработчик языка может предоставить функцию «валидатор», которая проверяет определение функции на правильность без фактического выполнения. Функция валидатора вызывается
CREATE FUNCTION
, если она существует. Если функция валидатора предоставляется языком, объявите ее с помощью команды, подобной этой:CREATE FUNCTION validator_function_name(oid)
RETURNS void
AS 'path-to-shared-object'
LANGUAGE C STRICT; -
(ru-ru.XPLANG-INSTALL-CR5)= Наконец, PL должен быть объявлен командой:
CREATE [TRUSTED] LANGUAGE language_name
HANDLER handler_function_name
[INLINE inline_function_name]
[VALIDATOR validator_function_name] ;Необязательное ключевое слово
TRUSTED
указывает, что язык не предоставляет доступ к данным, которые пользователь иначе бы не имел. Доверенные языки предназначены для обычных пользователей баз данных (тех, у кого нет привилегий суперпользователя), и позволяют им безопасно создавать функции и процедуры. Поскольку функции PL выполняются внутри сервера базы данных, флагTRUSTED
следует давать только тем языкам, которые не допускают доступа к внутренним компонентам сервера базы данных или файловой системе. Языки PL/pgSQL, PL/Tcl и PL/Perl считаются надежными; языки PL/TclU, PL/PerlU и PL/PythonU разработаны для предоставления неограниченной функциональности и не должны быть помечены как надежные.
Пример ниже показывает, как процедура ручной установки будет работать с языком PL/Perl.
Пример ручной установки PL/Perl
Следующая команда сообщает серверу баз данных, где найти общий объект для функции обработчика вызовов языка PL/Perl:
CREATE FUNCTION plperl_call_handler() RETURNS language_handler AS
'$libdir/plperl' LANGUAGE C;
PL/Perl имеет встроенную функцию обработки и функцию проверки, поэтому также объявляем их:
CREATE FUNCTION plperl_inline_handler(internal) RETURNS void AS
'$libdir/plperl' LANGUAGE C STRICT;
CREATE FUNCTION plperl_validator(oid) RETURNS void AS
'$libdir/plperl' LANGUAGE C STRICT;
Команда:
CREATE TRUSTED LANGUAGE plperl
HANDLER plperl_call_handler
INLINE plperl_inline_handler
VALIDATOR plperl_validator;
Затем определяет, что ранее объявленные функции должны быть вызваны для функций и процедур, где атрибут языка равен plperl
.
В стандартной установке PostgreSQL, обработчик для языка PL/pgSQL построен и установлен в каталог «библиотек»; кроме того, сам язык PL/pgSQL устанавливается во всех базах данных. Если поддержка Tcl настроена, то обработчики для PL/Tcl и PL/TclU создаются и устанавливаются в каталоге библиотеки, но сам язык не устанавливается ни в одной базе данных по умолчанию. Аналогично, если настроена поддержка Perl, создаются и устанавливаются обработчики PL/Perl и PL/PerlU, а если настроена поддержка Python, устанавливается обработчик PL/PythonU. Однако эти языки не установлены по умолчанию.