So... now I'm completely puzzled whether this is a bug, a desired result or just a loosely standardized thing.
Help anyone?
On Fri, Aug 27, 2010 at 5:41 PM, Vyacheslav Kalinin <vka@xxxxxxxx> wrote:
Hi,Apparently scalar subquery when used as a part of SELECT statement and when it does not depend on outer query columnsis executed only once per statement, e.g.:postgres=# select i, (select random()) rand from generate_series(1, 3) i;i | rand---+-------------------1 | 0.9923198260366922 | 0.9923198260366923 | 0.992319826036692(Though term "depend" is subtle, compare these:postgres=# select i, (select random() + case when false then i else 0 end ) rand from generate_series(1, 3) i;i | rand---+-------------------1 | 0.8062654137611392 | 0.8062654137611393 | 0.806265413761139(3 rows)postgres=# select i, (select random() where i=i ) rand from generate_series(1, 3) i;i | rand---+-------------------1 | 0.4264438627287752 | 0.1330719976685943 | 0.751982506364584(3 rows)postgres=# select i, (select random() where i=i or i is null ) rand from generate_series(1, 3) i;i | rand---+-------------------1 | 0.3209824068471792 | 0.9967622528783983 | 0.076554249972105(3 rows)Looks like dependence is not there anymore if PG is smart enough to simplify boolean expressions)Anyway, as some older PG versions and Oracle behave similarly I suppose this result is expected and desired (correct?),but unfortunately not well-documented (did I miss it mentioned?).Can anyone shed some light on this and/or probably update docs?P.S.I got bitten by a statement like this:select (select nextval('someseq') * a + b from somefunc()), col1, ....with a and b being OUT parameters of somefunc().