gds (gds) wrote,
gds
gds

постгрес, хранимые процедуры

Наткнулся на говно. Имею в постгресе хранимку вида
declare
  l_bool boolean;
begin
  l_bool := somefunc();
  return query select * from
    (select * from table where l_bool
     union all
     select * from table where not l_bool and ...
    );

И вот, при замене в запросе переменной l_bool на литерал с реальным значением я получаю 5мс вместо 1600мс.
Это -- не то "кеширование планов", которое хорошо задокументировано в мануле, это что-то другое, так как "кеширование планов" работает при первом вызове функции в пределах сессии, а я вызываю эту функцию с одним и тем же параметром как до, так и после изменения. И это не затраты на парсинг + построение планов, так как последующие запуски показывают примерно то же время.
А план запроса "с переменными" не посмотреть, так как explain хочет на входе полноценный, умеющий выполняться запрос.
В оракле такой хуйни не было!
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 1 comment