CREATE LANGUAGE
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 и создать заново.
Примечание 1
Примечание 1
Если команда CREATE LANGUAGE создает язык в базе данных templatel, поддержка этого языка будет автоматически включаться во все базы данных, созданные на основе этого шаблона (используемого по умолчанию).
Чтобы процедурный язык мог использоваться в PostgreSQL, для него должен быть написан специальный обработчик вызовов, откомпилированный в двоичный формат. Следовательно, для написания обработчиков требуются только компилируемые языки (такие, как С и C++).
Обработчик вызовов также должен быть отдельно определен в PostgreSQL как функция, вызываемая без аргументов и возвращающая тип opaque. Подобное определение обработчика предотвращает непосредственный вызов функции в командах SQL.