Обсуждение: BUG #15291: Lateral join has different/suprising semantics (withimpure function)
BUG #15291: Lateral join has different/suprising semantics (withimpure function)
От
PG Bug reporting form
Дата:
The following bug has been logged on the website:
Bug reference: 15291
Logged by: Marek K.
Email address: kadek.marek@gmail.com
PostgreSQL version: 11beta2
Operating system: Ubuntu, OSX
Description:
Following SQL:
CREATE EXTENSION "uuid-ossp";
CREATE TABLE fruits (name VARCHAR);
INSERT INTO fruits VALUES ('banana'), ('apple');
-- 1:
-- banana | uuid1
-- apple | uuid1
SELECT f.name, t.uuid FROM fruits f
CROSS JOIN LATERAL (
SELECT uuid_generate_v4() AS uuid FROM (VALUES(1)) v
) t;
-- 2:
-- banana | uuid1
-- apple | uuid2
SELECT f.name, t.uuid FROM fruits f
CROSS JOIN LATERAL (
SELECT f.name, uuid_generate_v4() AS uuid FROM (VALUES(1)) v
) t
I can understand why it's happening what is happening, yet I still find it
to be problematic. In my opinion those two selects should yield same
results. Hence for impure functions lateral semantics should be preserved
and not optimized away.
I am not 100% sure it can be classified as a bug, but looking into what your
opinion is.
=?utf-8?q?PG_Bug_reporting_form?= <noreply@postgresql.org> writes:
> [ LATERAL is ignored when sub-select has no actual lateral references ]
> I can understand why it's happening what is happening, yet I still find it
> to be problematic. In my opinion those two selects should yield same
> results. Hence for impure functions lateral semantics should be preserved
> and not optimized away.
I believe this behavior is effectively required by the SQL spec.
In any case, removing it would pessimize many queries in which writing
an unnecessary LATERAL has no bad side-effects today, so I'm disinclined
to change a behavior that's stood for half a dozen releases now.
regards, tom lane