Обсуждение: Immutable function with bind value

Поиск
Список
Период
Сортировка

Immutable function with bind value

От
Brice Maron
Дата:
Hi,

i've discovered something kind of weird  while developing my app...
I was trying to fetch some records in a table using a function immutable.
In my interface it was really slow and while i was in a psql it was
really fast ...

After some research i've found out that it was caused by the bind
parameter "forcing" the immutable function to execute each time my
query gets a record.

while i know that the value can't be known at planning time the
difference between the binded / not binded is quite enormous...

i've isolated a test case here....

https://gist.github.com/e93792540cb3a68054c9

(it happens at least in pg 8.4 and 9.1.2)


What do you think about it... bug? feature?  how can i avoid it?


Thanks

Re: Immutable function with bind value

От
Matteo Beccati
Дата:
On 20/01/2012 12:43, Brice Maron wrote:
> Hi,
>
> i've discovered something kind of weird  while developing my app...
> I was trying to fetch some records in a table using a function immutable.
> In my interface it was really slow and while i was in a psql it was
> really fast ...
>
> After some research i've found out that it was caused by the bind
> parameter "forcing" the immutable function to execute each time my
> query gets a record.
>
> while i know that the value can't be known at planning time the
> difference between the binded / not binded is quite enormous...
>
> i've isolated a test case here....
>
> https://gist.github.com/e93792540cb3a68054c9
>
> (it happens at least in pg 8.4 and 9.1.2)
>
>
> What do you think about it... bug? feature?  how can i avoid it?

How about:

PREPARE test (varchar) as select * from test where a = $1;
EXECUTE test(test_immutable(1));


Cheers
--
Matteo Beccati

Development & Consulting - http://www.beccati.com/

Re: Immutable function with bind value

От
Brice Maron
Дата:
Thanks Matteo for your answer...

but.. this is only a usecase... i'm currently using thing like this in
a php app,

so i'm doing kind of  a as

select * from test where a = test_immutable(?);

then

execute('var');

unfortunately there, i can't to an execute(test_immutable('var'))


for now i've avoid using bind for those queries but i didn't like it....


Cheers,

Brice

On Fri, Jan 20, 2012 at 15:28, Matteo Beccati <php@beccati.com> wrote:
> On 20/01/2012 12:43, Brice Maron wrote:
>> Hi,
>>
>> i've discovered something kind of weird  while developing my app...
>> I was trying to fetch some records in a table using a function immutable.
>> In my interface it was really slow and while i was in a psql it was
>> really fast ...
>>
>> After some research i've found out that it was caused by the bind
>> parameter "forcing" the immutable function to execute each time my
>> query gets a record.
>>
>> while i know that the value can't be known at planning time the
>> difference between the binded / not binded is quite enormous...
>>
>> i've isolated a test case here....
>>
>> https://gist.github.com/e93792540cb3a68054c9
>>
>> (it happens at least in pg 8.4 and 9.1.2)
>>
>>
>> What do you think about it... bug? feature?  how can i avoid it?
>
> How about:
>
> PREPARE test (varchar) as select * from test where a = $1;
> EXECUTE test(test_immutable(1));
>
>
> Cheers
> --
> Matteo Beccati
>
> Development & Consulting - http://www.beccati.com/