Нет, это не сработает, потому что функция не имеет никакого отношения к вашему блоку DO
.Это постоянный объект базы данных, который будет продолжать существовать в базе данных после завершения блока DO
.
По сути, функция - это просто строка с телом функции (и некоторыми метаданными, см. pg_proc
);в этом случае тело функции состоит из текста между открытием и закрытием $f$
.Он интерпретируется обработчиком языка при запуске функции.
Единственные данные базы данных, на которые вы можете ссылаться в функции, - это другие постоянные объекты базы данных, и переменная в блоке DO
не является одной из этих.
В PostgreSQL нет глобальных переменных, за исключением - в некотором смысле - параметров конфигурации.Вы можете получить к ним доступ с помощью команд SQL SET
и SHOW
и, что более удобно в коде, с помощью функций set_config
и current_setting
.