Andriy Tkachuk wrote:

Hi folks.

What's wrong with planner that executes my query in function?:
(i mean no explanation but runtime)


tele=# EXPLAIN analyze select calc_total(6916799, 1062363600, 1064955599); QUERY PLAN ------------------------------------------------------------------------------------------ Result (cost=0.00..0.01 rows=1 width=0) (actual time=36919.37..36919.37 rows=1 loops=1) Total runtime: 36919.40 msec ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tele=# \df+ calc_total
...
declare
        usr alias for $1;
        d1 alias for $2;
        d2   alias for $3;
        res integer;
begin
        select sum(cost) into res
                from bills where
                        (parent(user_id) = usr or user_id = usr)
                        and dat >= d1 and dat < d2;
        if res is not null then
                return res;
        else
                return 0;
        end if;
end;

You didn't wrote the type of d1 and d2, I had your same problem:


declare
   a_user alias for $1;
   res INTEGER;
begin
         select cost into res
         from my_table
         where login = a_user;

        ......
end;

the problem was that login was a VARCHAR and a_user was a TEXT so
the index was not used, was enough cast a_user::varchar;


I believe that your dat, d1, d2 are not "index" comparable.



Gaetano












---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings

Reply via email to