Выражения

Все выражения, используемые в операторах PL/pgSQL, обрабатываются с использованием основного SQL-исполнителя сервера. Например, когда вы пишете оператор PL/pgSQL как

IF выражение THEN ...

PL/pgSQL вычислит выражение, отправив на основной движок SQL следующий запрос:

SELECT выражение

При формировании команды SELECT любые вхождения имен переменных PL/pgSQL заменяются параметрами запроса, как описано в подразделе Подстановка переменных. Это позволяет подготовить план запроса для SELECT только один раз, а затем повторно использовать его для последующих вычислений с различными значениями переменных. Таким образом, на самом деле при первом использовании выражения по сути происходит выполнение команды PREPARE. Например, если мы объявили две целочисленные переменные x и y и пишем

IF x < y THEN ...

тогда то, что происходит за кулисами, равнозначно

PREPARE имя_оператора(integer, integer) AS SELECT $1 < $2;

и затем этот подготовленный оператор выполняется с EXECUTE при каждом выполнении оператора IF с текущими значениями переменных PL/pgSQL в качестве значений параметров. Обычно эти детали неважны для пользователя PL/pgSQL, но их полезно знать при попытке диагностировать проблему. Более подробная информация представлена в подразделе Кеширование плана.

Поскольку выражение преобразуется в команду SELECT, оно может содержать те же предложения, что и обычная команда SELECT, за исключением предложений UNION, INTERSECT и EXCEPT верхнего уровня. Таким образом, например, можно проверить, является ли таблица непустой:

IF count(*) > 0 FROM my_table THEN ...

так как выражение между IF и THEN анализируется, как если бы это была команда SELECT count(*) > 0 FROM my_table. SELECT должна выдавать один столбец и не более одной строки. (Если она не выдает ни одной строки, считается, что результат равен NULL.)