Функция Postgres намного медленнее при использовании входных переменных

У меня есть функция в Postgres 8.3.5, которая выбирает данные из нескольких таблиц и выводит результат в одну таблицу:

create or replace function test_function_2(startdate timestamp, enddate timestamp)
returns void as $
begin
     delete from cl_final_report;

     INSERT INTO cl_final_report
     SELECT 
         b.batchkey AS batchnumber, 
         pv.productkey, 
         p.name AS productname, 
         avg(r.value) AS avgchemlean, 
         sum(r.auxvalue) AS totalweight, 
         max(o.time) AS timecompleted
     FROM result r
     LEFT JOIN physicalvalue pv ON r.physicalvaluekey = pv.physicalvaluekey
     LEFT JOIN product p ON pv.productkey = p.productkey
     LEFT JOIN object o ON r.objectkey = o.objectkey
     LEFT JOIN batch b ON o.batchkey = b.batchkey
     WHERE pv.name = 'CL'::text AND
         and o.time between startdate and enddate
     GROUP BY b.batchkey, pv.productkey, p.name
end
$ language plpgsql;

Эта функция занимает 113 секунд для завершения использования PgAdmin и выполнения этой команды:

select test_function_2('05/02/2013', '05/03/2013')

Однако, если я заменю входные переменные в функции на литералы, как это:

create or replace function test_function_2(startdate timestamp, enddate timestamp)
returns void as $
begin
     delete from cl_final_report;

     INSERT INTO cl_final_report
     SELECT 
         b.batchkey AS batchnumber, 
         pv.productkey, 
         p.name AS productname, 
         avg(r.value) AS avgchemlean, 
         sum(r.auxvalue) AS totalweight, 
         max(o.time) AS timecompleted
     FROM result r
     LEFT JOIN physicalvalue pv ON r.physicalvaluekey = pv.physicalvaluekey
     LEFT JOIN product p ON pv.productkey = p.productkey
     LEFT JOIN object o ON r.objectkey = o.objectkey
     LEFT JOIN batch b ON o.batchkey = b.batchkey
     WHERE pv.name = 'CL'::text AND
         and o.time between '05/02/2013' and '05/03/2013'
     GROUP BY b.batchkey, pv.productkey, p.name
end
$ language plpgsql;

Функция выполняется менее чем за 5 секунд.

Я новичок в Postgres, поэтому, возможно, что-то мне не хватает, но я не могу найти ответ где-нибудь

Ответы на вопрос(3)

Ваш ответ на вопрос