Мы начали использовать Postgres гораздо позже, перейдя с SQL Сервера. Я заметил, что парсер / компилятор Postgres позволяет создавать функции, которые (как мне кажется) могут быть отклонены во время создания.
Один из примеров того, о чем я говорю, - это операторы select в блоках plpg. sql:
create or replace function test() returns void as $$
begin
select * from pg_database;
end;
$$ language plpgsql;
Эта функция не работает во время выполнения с запросом ", не имеющим место назначения для данных результатов ". Почему эта ошибка не будет обнаружена во время создания функции? Разрешено ли использование select без return в блоке plpg sql?
Другой тип ошибок, которые не всегда обнаруживаются во время компиляции, - это ошибки несоответствия типов между объявленным типом возврата и фактическим тип значения. Они обнаруживаются в простых случаях, но начинают переходить во время выполнения в более сложных функциях. Я подозреваю, что есть некоторые ограничения в выводе / анализе типов Postgres, есть ли дополнительная информация об этом?
tldr: Есть ли способ заставить Postgres анализатор / компилятор больше не работать при создании функции?