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



CREATE LANGUAGE

Определение нового языка, используемого при создании функций.

Синтаксис

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE 'язык'

HANDLER обработчик

LANCOMPILER 'комментарий'

Параметры

  • TRUSTED. Ключевое слово TRUSTED означает, что PostgreSQL разрешает непривилегированным пользователям обходить ограничения, связанные с наличием прав доступа к языку'. Если в процессе определения языка этот параметр не указывался, то использование языка для создания новых функций будет разрешено лишь суперпользователям.
  • PROCEDURAL. Необязательное ключевое слово PROCEDURAL. Делает команду CREATE LANGUAGE более наглядной, но не влияет на ее работу.
  • язык. Имя нового процедурного языка (без учета регистра символов). Переопределение имен существующих, встроенных языков PostgreSQL не допускается.
  • HANDLER обработчик. Имя заранее определенной функции, вызываемой при выполнении процедур PL.
  • комментарий. Строка, сохраняемая в поле lancompiler системной таблицы pg_language. Секция LANCOMPILER оставлена для обеспечения совместимости, не имеет практического смысла и может быть удалена в следующих версиях PostgreSQL. Тем не менее в версии 7.1.x ее присутствие остается обязательным.

Результаты

  • CREATE. Сообщение выдается при успешном определении нового языка.
  • ERROR: PL handler function обработчик() doesn't exist. Ошибка—функция, указанная в параметре HANDLER, не существует.

Описание

Команда CREATE LANGUAGE загружает новый процедурный язык в подключенную базу данных. Она используется с процедурными языками, указанными с ключом - -with-язык при первоначальной установке PostgreSQL. Например, для включения поддержки pltcl следует передать ключ - -with-tcl в процессе конфигурирования PostgreSQL.

После выполнения этой команды вы сможете создавать новые функции на добавленном языке. Команда CREATE LANGUAGE может выполняться только суперпользователем.

В PostgreSQL 7.1.x (последней версии на момент написания книги) модификация созданных языков не поддерживается. Чтобы изменить определение процедурного языка, необходимо удалить его из базы данных командой DROP LANGUAGE и создать заново.

ПРИМЕЧАНИЕ

Если команда CREATE LANGUAGE создает язык в базе данных templatel, поддержка этого языка будет автоматически включаться во все базы данных, созданные на основе этого шаблона (используемого по умолчанию).

Чтобы процедурный язык мог использоваться в PostgreSQL, для него должен быть написан специальный обработчик вызовов, откомпилированный в двоичный формат. Следовательно, для написания обработчиков требуются только компилируемые языки (такие, как С и C++).

Обработчик вызовов также должен быть отдельно определен в PostgreSQL как функция, вызываемая без аргументов и возвращающая тип opaque. Подобное определение обработчика предотвращает непосредственный вызов функции в командах SQL.

Примеры

При выполнении команды CREATE LANGUAGE обработчик для соответствующего языка должен быть создан заранее. Регистрация процедурных языков начинается с создания функции, задающей местонахождение объектного кода обработчика. В следующем фрагменте создается обработчик, объектный код которого находится в файле /usr/local/pgsql/lib/libexample.so:

booktown=# CREATE FUNCTION example_call_handler ( ) RETURNS opaque

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

booktown-# LANGUAGE 'C';

CREATE

На втором этапе командой CREATE LANGUAGE существующий язык загружается в подключенную базу данных. В следующем примере создается язык plexample, использующий обработчик из предыдущего примера:

booktown=# CREATE PROCEDURAL LANGUAGE 'piexample'

booktown-# HANDLER example_call_handler

booktown-# LANCOMPILER 'My Example':

CREATE