39.1. Установка процедурных языков#

39.1. Установка процедурных языков

39.1. Установка процедурных языков

Все языки программирования должны быть установлены в каждой базе данных, в которой они будут использоваться. Однако языки программирования, установленные в базе данных template1, автоматически становятся доступными во всех последующих созданных базах данных, так как их записи в template1 будут скопированы с помощью CREATE DATABASE.. Таким образом, администратор базы данных может решить, какие языки доступны в каких базах данных, и может сделать некоторые языки доступными по умолчанию, если это необходимо.

Для языков, поставляемых со стандартным дистрибутивом, достаточно выполнить команду CREATE EXTENSION language_name для установки языка в текущую базу данных. Настройка вручную, описанная ниже, рекомендуется только для установки языков, которые не были упакованы в виде расширений.

Руководство по установке процедурного языка

В базу данных устанавливается процедурный язык в пять шагов, которые должен выполнить суперпользователь базы данных. В большинстве случаев необходимые SQL-команды должны быть упакованы в скрипт установки расширения, чтобы можно было использовать команду CREATE EXTENSION для их выполнения.

  1. Общий объект для обработчика языка должен быть скомпилирован и установлен в соответствующий каталог библиотек. Часто обработчик языка зависит от внешней библиотеки, которая предоставляет фактический движок программирования на языке; в этом случае она также должна быть установлена.

  2. Обработчик должен быть объявлен с помощью команды

    CREATE FUNCTION handler_function_name()
        RETURNS language_handler
        AS 'path-to-shared-object'
        LANGUAGE C;
    

    Специальный возвращаемый тип language_handler сообщает системе базы данных, что эта функция не возвращает один из определенных типов данных SQL и не может быть непосредственно использована в операторах SQL.

  3. По желанию, обработчик языка может предоставить функцию обработчика встроенного, которая выполняет анонимные блоки кода (DO команды) написанные на этом языке. Если обработчик встроенной функции предоставляется языком, объявите его с помощью команды типа

    CREATE FUNCTION inline_function_name(internal)
        RETURNS void
        AS 'path-to-shared-object'
        LANGUAGE C;
    

  4. По желанию, обработчик языка может предоставить функцию валидатора, которая проверяет правильность определения функции без ее фактического выполнения. Функция валидатора вызывается командой CREATE FUNCTION, если она существует. Если в языке предоставляется функция валидатора, объявите ее с помощью команды типа

    CREATE FUNCTION validator_function_name(oid)
        RETURNS void
        AS 'path-to-shared-object'
        LANGUAGE C STRICT;
    

  5. Наконец, 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 предназначены для предоставления неограниченных возможностей и не должны быть помечены как доверенные.

Пример 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, но эти языки не устанавливаются по умолчанию.