Иллюстрированный самоучитель по PostgreSQL

Расширение PostgreSQL

Функции С, как и функции SQL, могут вызываться любым пользователем. Функции С могут вносить прямые изменения в файловую систему (если позволяют права) и производить операции системного уровня, поэтому к их проектированию следует подойти особенно тщательно, чтобы избежать потенциальных злоупотреблений. В листинге 7.51 приведены примеры нескольких вызовов функции is_zero, определенной в листинге 7.49, и ее перегруженной версии из листинга 7.51.

Листинг 7.51. Использование функций С.

booktown=# SELECT is_zero(0) AS zero .is_zero(l) AS one,
booktown-# 1s_zero(6. 0) AS one_zero, is_zero(11.12) AS neither:
zero | one | one_zero | neither
t [ f | t | f
(1 row)

Уничтожение функций

Функции уничтожаются владельцем или суперпользователем при помощи команды SQL DROP FUNCTION. Синтаксис команды DROP FUNCTION:

DELETE FUNCTION имя ([ тип_аргумента [….] ]):

В листинге 7.52 приведен пример удаления функции isbn_to_title(text). Обратите внимание: типы аргументов должны указываться обязательно, даже если функция и не перегружалась.

Листинг 7.52. Удаление функции.

booktown=# DROP FUNCTION isbn_to_title(text);
DROP

Сообщение сервера DROP означает, что функция была успешно удалена. Команда DROP FUNCTION, как и большинство команд DROP, необратима, поэтому перед ее выполнением убедитесь в том, что функцию действительно требуется удалить.

Создание новых операторов

Кроме пользовательских функций PoslgreSQL позволяет создавать пользовательские операторы. С технической точки зрения операторы всего лишь обеспечивают альтернативный синтаксис для вызова функций. Например, оператор сложения (+) в действительности вызывает одну из встроенных функций (numeri c_add() и т. д.). Пример:

booktown=# SELECT I + 2 AS by_operator .numeric_add(l,2) AS by_function;
by_operator [ by_function
3 | 3
(1 row)

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

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.