5.13. Функции #
В этом разделе описано, как управлять функциями, и приведены следующие инструкции:
Создание функции
В навигационной панели перейдите в Базы данных.
(Необязательно) Чтобы отобразить системные базы данных, активируйте переключатель Показывать системные базы данных.
Нажмите на имя базы данных.
Нажмите на имя схемы.
Выберите Функции.
В правом верхнем углу страницы нажмите Создать функцию.
Укажите параметры новой функции (помеченные звёздочкой параметры являются обязательными):
Имя.
Язык: процедурный язык функции.
Аргументы.
Чтобы добавить аргумент:
Нажмите Добавить аргумент +.
Укажите параметры нового аргумента (помеченные звёздочкой параметры являются обязательными):
Имя.
Режим аргумента.
Возможные значения:
IN
OUT
INOUT
VARIADIC
Тип: тип данных аргумента.
Значение по умолчанию: значение аргумента по умолчанию.
Функция возвращает таблицу: указывает, возвращает ли функция таблицу.
При активации этого переключателя добавьте возвращаемое значение:
Нажмите Добавить возвращаемое значение +.
Укажите параметры нового возвращаемого значения (помеченные звёздочкой параметры являются обязательными):
Имя.
Тип.
Тип возвращаемого значения: тип данных возвращаемого значения.
Этот параметр доступен, только если вы активировали переключатель Функция возвращает таблицу.
Тело функции: тело функции на выбранном процедурном языке.
Оконная функция: указывает, является ли функция оконной.
Параметры для планировщика: атрибут, который информирует оптимизатор запросов о поведении функции.
Возможные значения:
Default: значение по умолчанию — Volatile.
Immutable: функция является immutable (постоянной), не может модифицировать базу данных и всегда возвращает один и тот же результат при определённых значениях аргументов; то есть, она не обращается к базе данных и не использует информацию, не переданную ей явно в списке аргументов.
Если функция имеет такую характеристику, любой её вызов с аргументами-константами можно немедленно заменить значением функции.
Stable: функция является stable (стабильной), не может модифицировать базу данных и в рамках одного сканирования таблицы она всегда возвращает один и тот же результат для определённых значений аргументов, но этот результат может быть разным в разных операторах SQL.
Это подходящий выбор для функций, результаты которых зависят от содержимого и параметров базы данных, например текущего часового пояса. Однако этот вариант не подходит для триггеров
AFTER, которые пытаются прочитать строки, изменённые текущей командой.Примечание
Функции семейства
current_timestampтакже считаются стабильными, так как их результаты не меняются внутри транзакции.Volatile: функция является volatile (изменчивой), её результат может меняться даже в рамках одного сканирования таблицы, поэтому её вызовы невозможно оптимизировать.
Только некоторые функции являются изменчивыми, например
random(),currval()иtimeofday().Примечание
Любая функция с побочными эффектами должна классифицироваться как изменчивая, даже если её результат предсказуем, чтобы её вызовы не были оптимизированы. Примером такой функции является
setval().
Строгая обработка NULL значений: указывает, что функция всегда будет возвращать
NULL, если в одном из аргументов был переданNULL.Не имеет побочных эффектов: указывает, что функция не имеет побочных эффектов, так как не раскрывает информацию о своих аргументах, а только возвращает результат.
Параметры безопасности: права, с которыми будет вызываться и выполняться функция.
Возможные значения:
По умолчанию: значение по умолчанию — Invoker.
Invoker: функция будет выполняться с правами пользователя, вызвавшего её.
Definer: функция будет выполняться с правами пользователя, создавшего её.
Использование в параллельном режиме: параметры вызова функции в параллельном режиме.
Возможные значения:
По умолчанию: значение по умолчанию — Unsafe.
Unsafe: функцию нельзя выполнять в параллельном режиме и присутствие такой функции в операторе SQL приводит к выбору последовательного плана выполнения.
Restricted: функцию можно выполнять в параллельном режиме, но только в ведущем процессе группы.
Safe: функция безопасна для выполнения в параллельном режиме без ограничений, в том числе в параллельных рабочих процессах.
Таймаут при ожидании блокировки, с.: максимальная длительность ожидания получения блокировки таблицы, индекса, строки или другого объекта базы данных. Если ожидание не закончилось за указанное время, оператор прерывается. Это ограничение действует на каждую попытку получения блокировки по отдельности.
За подробной информацией об этом параметре обратитесь к официальной документации Postgres Pro.
Показать SQL: отображает SQL-запрос создания функции с заданными параметрами.
Нажмите Создать.
Просмотр функций
В навигационной панели перейдите в Базы данных.
(Необязательно) Чтобы отобразить системные базы данных, активируйте переключатель Показывать системные базы данных.
Нажмите на имя базы данных.
Нажмите на имя схемы.
Выберите Функции.
Отобразится таблица функций со следующими столбцами:
Имя: уникальное имя функции или процедуры.
Аргументы: передаваемые функции аргументы с типами данных.
Возвращаемые значения: возвращаемые функцией значения с типами данных.
Список контроля доступа: права доступа к функции.
Действия.
За подробной информацией о доступных действиях обратитесь к другим инструкциям в этом разделе.
Редактирование функции
В навигационной панели перейдите в Базы данных.
(Необязательно) Чтобы отобразить системные базы данных, активируйте переключатель Показывать системные базы данных.
Нажмите на имя базы данных.
Нажмите на имя схемы.
Выберите Функции.
Нажмите
рядом с функцией.Отредактируйте параметры функции.
Нажмите Сохранить.
Удаление функции
Важно
После удаления функции невозможно восстановить.
Чтобы удалить функцию:
В навигационной панели перейдите в Базы данных.
(Необязательно) Чтобы отобразить системные базы данных, активируйте переключатель Показывать системные базы данных.
Нажмите на имя базы данных.
Нажмите на имя схемы.
Выберите Функции.
Нажмите
рядом с функцией.Нажмите Удалить.