39.1. Установка процедурных языков#
39.1. Установка процедурных языков
Все языки программирования должны быть “установлены” в каждой базе данных, в которой они будут использоваться. Однако языки программирования, установленные в базе данных template1
, автоматически становятся доступными во всех последующих созданных базах данных, так как их записи в template1
будут скопированы с помощью CREATE DATABASE
.. Таким образом, администратор базы данных может решить, какие языки доступны в каких базах данных, и может сделать некоторые языки доступными по умолчанию, если это необходимо.
Для языков, поставляемых со стандартным дистрибутивом, достаточно выполнить команду CREATE EXTENSION
language_name
для установки языка в текущую базу данных.
Настройка вручную, описанная ниже, рекомендуется только для установки языков, которые не были упакованы в виде расширений.
Руководство по установке процедурного языка
В базу данных устанавливается процедурный язык в пять шагов, которые должен выполнить суперпользователь базы данных. В большинстве случаев необходимые SQL-команды должны быть упакованы в скрипт установки “расширения”, чтобы можно было использовать команду CREATE EXTENSION
для их выполнения.
Общий объект для обработчика языка должен быть скомпилирован и установлен в соответствующий каталог библиотек. Часто обработчик языка зависит от внешней библиотеки, которая предоставляет фактический движок программирования на языке; в этом случае она также должна быть установлена.
Обработчик должен быть объявлен с помощью команды
CREATE FUNCTION
handler_function_name
() RETURNS language_handler AS 'path-to-shared-object
' LANGUAGE C;Специальный возвращаемый тип
language_handler
сообщает системе базы данных, что эта функция не возвращает один из определенных типов данных SQL и не может быть непосредственно использована в операторах SQL.По желанию, обработчик языка может предоставить функцию обработчика “встроенного”, которая выполняет анонимные блоки кода (
DO
команды) написанные на этом языке. Если обработчик встроенной функции предоставляется языком, объявите его с помощью команды типаCREATE FUNCTION
inline_function_name
(internal) RETURNS void AS 'path-to-shared-object
' LANGUAGE C;По желанию, обработчик языка может предоставить функцию “валидатора”, которая проверяет правильность определения функции без ее фактического выполнения. Функция валидатора вызывается командой
CREATE FUNCTION
, если она существует. Если в языке предоставляется функция валидатора, объявите ее с помощью команды типаCREATE FUNCTION
validator_function_name
(oid) RETURNS void AS 'path-to-shared-object
' LANGUAGE C STRICT;Наконец, PL должен быть объявлен с помощью команды
CREATE [TRUSTED] LANGUAGE
language_name
HANDLERhandler_function_name
[INLINEinline_function_name
] [VALIDATORvalidator_function_name
] ;Необязательное ключевое слово
TRUSTED
указывает, что язык не предоставляет доступ к данным, к которым пользователь не имел бы доступа. Доверенные языки предназначены для обычных пользователей базы данных (тех, у кого нет привилегий суперпользователя) и позволяют им безопасно создавать функции и процедуры. Поскольку PL-функции выполняются внутри сервера базы данных, флагTRUSTED
следует указывать только для языков, которые не позволяют получить доступ к внутреннему устройству сервера базы данных или файловой системе. Языки PL/pgSQL, PL/Tcl и PL/Perl считаются доверенными; языки PL/TclU, PL/PerlU и PL/PythonU предназначены для предоставления неограниченных возможностей и не должны быть помечены как доверенные.
Пример 39.1 показывает, как работает процедура ручной установки с языком PL/Perl.
Пример 39.1. Установка 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
.
При установке Tantor SE-1С по умолчанию создается обработчик для языка PL/pgSQL и устанавливается в каталог “library”; кроме того, сам язык PL/pgSQL устанавливается во всех базах данных. Если включена поддержка Tcl, обработчики для языков PL/Tcl и PL/TclU создаются и устанавливаются в каталоге library, но сами языки не устанавливаются в базах данных по умолчанию. Аналогично, обработчики для языков PL/Perl и PL/PerlU создаются и устанавливаются, если включена поддержка Perl, и обработчик PL/PythonU устанавливается, если включена поддержка Python, но эти языки не устанавливаются по умолчанию.