Внутренне Postgres знает два типа команд - команды (CREATE
, ALTER
, DROP
, ..) и запросы (SELECT
, INSERT
, UPDATE
, DELETE
). Каждая команда имеет специальную реализацию. Запросы реализуются вместе с шагами: разбор, анализ, оптимизация, выполнение. Существует высокая вероятность того, что запросы будут выполняться повторно. Команды обычно не выполняются больше раз. Затем запросы имеют специальную оптимизацию для повторного выполнения - параметризованный план. План представляет собой последовательность шагов выполнения запроса. Обычно это одно и то же, но параметры (переменные) разные - вы можете искать Павла или Томаса, вы можете вставить Павла или Томаса. Нет ничего похожего на команды.
Вы можете использовать переменные plpgsql везде, где возможно использование параметров плана. Присоединяйтесь к нему во время выполнения PlpgSQL. И вы не можете использовать переменные где-либо еще. Операторы DDL (у команд нет планов), и тогда вы не сможете использовать там переменные. Единственная альтернатива - это динамическая команда sql - EXECUTE
в PLpgSQL.