Re: BUG #8678: Multiple evaluation single volatile function in select statement

From: David Johnston <polobo(at)yahoo(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #8678: Multiple evaluation single volatile function in select statement
Date: 2013-12-17 15:25:01
Message-ID: 1387293901431-5783731.post@n5.nabble.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

maxim.boguk wrote
> The following bug has been logged on the website:
>
> Bug reference: 8678
> Logged by: Maksym
> Email address:

> maxim.boguk@

> PostgreSQL version: 9.3.2
> Operating system: Linux
> Description:
>
> Hi everyone,
>
>
> One of my client got the problem of multiple-evaluation of the single
> volatile function call.
>
>
> Simplified test case:
>
>
> CREATE OR REPLACE FUNCTION _test1(OUT val1 float, OUT val2 float) AS
> $BODY$
> DECLARE
> _val float;
> BEGIN
> _val := random();
> val1 := _val;
> val2 := _val;
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
>
> Now good case:
> select * from _test1();
> val1 | val2
> -------------------+-------------------
> 0.616893119178712 | 0.616893119178712
>
>
>
>
> Wrong case:
> select (_test1()).*;
> val1 | val2
> ------------------+-------------------
> 0.54869711631909 | 0.251445888541639
>
>
>
>
> Wrong case hits especially painful when volatile function performs some
> modification of the money-related data.
>
>
> PS: yes I know such query could be rewritten via LATERAL but it doesn't
> make
> current behavior more correct.

I cannot recite any arguments for why this behavior exists but the fact is
that it does and is not likely to be "fixed". There are numerous ways to
avoid the multiple evaluation situation, not just LATERAL.

I'll add my vote to agreeing something should be done to avoid execution in
this situation but likely the end result will be an error as opposed to it
working correctly - which I am fine with.

If you give specifics about the case where the failure occurred that is a
much stronger example of why this needs to be improved upon compared to your
easily identifiable and fixable useless example. I know you just meant it
for a proof of your supposed bug but as this behavior is well-known such
proof doesn't add anything to the conversation.

David J.

--
View this message in context: http://postgresql.1045698.n5.nabble.com/BUG-8678-Multiple-evaluation-single-volatile-function-in-select-statement-tp5783110p5783731.html
Sent from the PostgreSQL - bugs mailing list archive at Nabble.com.

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Lane 2013-12-17 15:31:08 Re: BUG #8676: Bug Money JSON
Previous Message Bruce Momjian 2013-12-17 14:56:27 Re: hi,postgresql bug