Самоучитель по SQL-сервер в Linux



Поддержка PL/pgSQL

Поддержка языков программирования реализуется отдельным объектом базы данных. Таким образом, прежде чем использовать язык PL/pgSQL, необходимо включить его поддержку в базу данных (по умолчанию PL/pgSQL устанавливается вместе с PostgreSQL). В этом разделе описана процедура включения PL/pgSQL в существующую базу данных

Поддержка PL/pgSQL в базах данных PostgreSQL включается либо приложением createlang в командной строке, либо командой SQL CREATE LANGUAGE в клиенте (например, в psql). Команда CREATE LANGUAGE требует предварительного создания обработчика вызовов PL/pgSQL — функции, которая занимается непосредственной обработкой и интерпретацией кола PL/pgSQL.

С утилитой createlang проще работать, потому что она абстрагирует от пользователя создание обработчика вызовов и языка, но ниже будут описаны оба способа.

ПРИМЕЧАНИЕ

Установка PL/pgSQL в базе данных template! приводит к тому, в дальнейшем PL/pgSQL автоматически устанавливается во всех базах данных, создаваемых на основе шаблона tempi ate! (используемого по умолчанию).

Включение поддержки PL/pgSQL при помощи psql

Команда SQL CREATE LANGUAGE предназначена для включения поддержки процедурных языков в текущую базу данных. Тем не менее перед вызовом этой команды необходимо предварительно создать обработчик вызовов функцией CREATE FUNCTION. Синтаксис создания обработчика вызовов PL/pgSQL командой CREATE FUNCTION:

CREATE FUNCTION plpgsql_call_handler()

RETURNS OPAQUE AS '/библиот-ека_р05£дге5/р1 pgsql .so1 LANGUAGE 'C'

Параметр библиотека jjostgres определяет абсолютный системный путь к установленным библиотечным файлам PostgreSQL. По умолчанию это путь /usr/local/ psql/lib. В листинге 11.1 приведен пример создания обработчика вызовов PL/pgSQL функцией CREATE FUNCTION (предполагается, что файл plpgsql.so находится в каталоге по умолчанию).

Листинг 11.1. Создание обработчика вызовов PL/pgSQL

booktown=# CREATE FUNCTION plpgsql_call_handler ()

booktown-# RETURNS OPAQUE

booktown-# AS '/usr/local/pgsql/lib/plpgsql.so'

booktown-l LANGUAGE 'C';

CREATE

В листинге 11.1 создается только обработчик, а поддержка языка включается командой CREATE LANGUAGE. Синтаксис включения PL/pgSQL в базу данных:

CREATE LANGUAGE 'plpgsqV HANDLER plpgsql_call_handler

LANCOMPILER 'PL/pgSQL'

Здесь pi pgsql — обозначение языка, pi pgsql _ca! IJiand I er — имя обработчика, созданного командой CREATE FUNCTION (см. листинг 11.1), а строковая константа PL/ pgSQL, следующая за ключевым словом LANCOMPILER, содержит произвольное описание.

В листинге 11.2 команда CREATE LANGUAGE включает в базу данных booktown поддержку PL/pgSQL.

Листинг 11.2. Включение поддержки PL/pgSQL командой CREATE LANGUAGE

booktown=# CREATE LANGUAGE 'plpgsql' HANDLER pipgsql_call_handler

booktown-# LANCOMPILER 'PL/pgSQL';

CREATE

За ключевым словом HANDLER указывается то же имя, которое было указано при создании обработчика вызовов. В листинге 11.1 создавался обработчик с именем plpgsql_cal IJiandler, поэтому в листинге 11.2 используется то же имя.

Секция LANCOMPILER считается устаревшей, она унаследована от старых версий и ни на что не влияет. Несмотря на это, в PostgreSQL 7.1.x эта секция является обязательной. Обычно в ней вводится краткое описание языка.

Включение поддержки PL/pgSQL приложением createlang

Приложение createlang запускается в режиме командной строки. Если имя пользователя операционной системы, с которым вы зарегистрированы в настоящий момент, совпадает с именем суперпользователя целевой базы данных, для вызова createlang можно воспользоваться командой, приведенной в листинге 11.3 (при необходимости вам будет предложено ввести пароль). В противном случае имя суперпользователя базы данных передается приложению createlang с флагом -U, как показано в листинге 11.4.

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

$ cd /usr/local/pgsql/bin

booktown=# createlang plpgsql booktown

Листинг 11.4. Передача имени суперпользователя при вызове createlang

$ cd /usr/local/pgsql/bin

$ createlang plpgsql -U manager booktown

При успешном завершении программа createlang возвращает управление режиму командной строки без какого-либо вывода.




Книжный магазин