BUG #8678: Multiple evaluation single volatile function in select statement
От | maxim.boguk@gmail.com |
---|---|
Тема | BUG #8678: Multiple evaluation single volatile function in select statement |
Дата | |
Msg-id | E1Vr5Yt-0006cV-6e@wrigleys.postgresql.org обсуждение исходный текст |
Ответы |
Re: BUG #8678: Multiple evaluation single volatile function in
select statement
|
Список | pgsql-bugs |
The following bug has been logged on the website: Bug reference: 8678 Logged by: Maksym Email address: maxim.boguk@gmail.com 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.
В списке pgsql-bugs по дате отправления: