Расширение PostgreSQL
Создание функций SQL
Из всех разновидностей функций в PostgreSQL проще всего создаются "чистые" функции SQL, поскольку их создание не требует ни знания других языков, ни серьезного опыта программирования. Функция SQL определяется как обычная команда с позиционными параметрами.
Позиционный параметр представляет собой ссылку на один из аргументов, переданных при вызове функции SQL. Он называется позиционным, поскольку в ссылке указывается его позиция в списке переданных аргументов. Позиционный параметр состоит из знака $, за которым следует номер (нумерация начинается с 1). Например, $1 означает первый аргумент в переданном списке.
В листинге 7.46 создается функция isbn_to_title, которая возвращает название книги по заданному коду ISBN. Функция получает один аргумент типа text и возвращает результат того же типа.
Листинг 7.46. Создание функции SQL.
booktown=# CREATE FUNCTION isbn_to_title(text) RETURNS text booktown-l AS 'SELECT title FROM books booktown'f JOIN editions AS e (isbn .id) booktown'# USING (id) booktown'# WHERE isbn = $1' booktown-# LANGUAGE 'SQL'; CREATE
Позиционный параметр $1 при выборке заменяется значением первого аргумента в списке, переданном при вызове функции isbn_to_title. Позиционный параметр не заключается в отдельные апострофы, поскольку апострофы являются частью переданного аргумента. Остальные составляющие определения функции являются либо идентификаторами, либо стандартными ключевыми словами SQL.
Сообщение CREATE означает, что создание функции прошло успешно. В листинге 7.47 функция isbn_to_title вызывается с одним текстовым аргументом 0929605942. Функция возвращает название книги, связанное с этим кодом ISBN. При этом используется код SQL, содержащийся в листинге 7.46.
Листинг 7.47. Использование функции SQL.
booktown=# SELECT isbn_to_title('0929605942'); isbn to title The Tell-Tale Heart (1 row)
Созданная функция доступна для всех пользователей, обладающих соответствующими правами. Например, для выполнения функции isbn_to_title необходим доступ для чтения к таблицам editions и books (права пользователей описаны в главе 10).
Создание функций на языке С
СУБД PostgreSQL, написанная на языке С, может динамически подгружать откомпилированный код С без перекомпиляции пакета. Использование команды CREATE FUNCTION для компоновки с функциями С разрешено только суперпользователям, поскольку эти функции могут содержать системные вызовы, представляющие потенциальную угрозу для безопасности системы.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Документирование всего интерфейса API системы PostgreSQL выходит за рамки книги. Впрочем, опытный программист сможет очень легко написать, откомпилировать и скомпоновать простейшие функции С с использованием загружаемых общих модулей.
У компилятора gcc (GNU С Compiler) имеется ключ – shared, предназначенный для создания динамически загружаемых модулей. В простейшем случае загружаемый модуль создается командой следующего вида:
$ gcc – shared input.с – о output.so
Здесь input.с – имя файла, содержащего компилируемый код С, a output.so – файл общего загружаемого модуля.