Re: LATERAL and VOLATILE functions

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: LATERAL and VOLATILE functions
Date: 2012-12-15 22:24:46
Message-ID: CAFj8pRBco+4-67Hvvw0vm=dKjVGUZXpPpMApWYPgY8Vn9OJoAQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

2012/12/15 Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>:
> Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com> writes:
>> Is this behave expected?
>
>> -- unexpected
>> postgres=# select * from generate_series(1,3) g(v), LATERAL (SELECT random()) x;
>> ;
>> v random
>> ---+------------------
>> 1 0.63025646051392
>> 2 0.63025646051392
>> 3 0.63025646051392
>> (3 rows)
>
> The LATERAL keyword is a no-op since x doesn't contain any
> side-reference to g(v). So you get a plain join between g and
> a single-row relation x.
>
> If the SQL standard actually specified what LATERAL means, we could
> argue about whether that's a correct interpretation or not. I haven't
> been able to find anyplace where the spec defines the semantics though.
>
> And I'm fairly certain that we *don't* want it to mean "recompute
> for every row generated to the left of the keyword, whether there is
> a variable reference or not". Consider for example
>
> select ... from a, b, c join lateral d on ...
>
> If the D item only contains references to C, it's unlikely that the
> programmer wants it to be re-evaluated again for each possible row
> in A*B.

Stable and immutable functions should be recalculated once time, but
for volatile functions is recalculation probably more natural
(expected). Every time is strange, when function random() returns same
numbers. I am not sure if this behave can be problem in real usage -
probably it can be a surprise for someone who use random() for some
testing.

Regards

Pavel

>
> regards, tom lane

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Eisentraut 2012-12-16 06:29:47 Re: Assert for frontend programs?
Previous Message Tom Lane 2012-12-15 22:06:07 Re: LATERAL and VOLATILE functions