Over here -
http://www.postgresql.org/message-id/6351.1404663...@sss.pgh.pa.us Tom
noted that create_unique_path did not check for set returning functions.
Tom Wrote:
I notice that create_unique_path is not paying attention to the question
of whether the subselect's tlist contains SRFs or volatile functions.
It's possible that that's a pre-existing bug.
I looked at this a bit and I can confirm that it does not behave as it
should do. Take the following as an example:
create table x (id int primary key);
create table y (n int not null);
insert into x values(1);
insert into y values(1);
select * from x where (id,id) in(select n,generate_series(1,2) / 10 + 1 g
from y);
id
1
(1 row)
select * from x where (id,id) in(select n,generate_series(1,2) / 10 + 1 g
from y group by n);
id
1
1
(2 rows)
The 2nd query does group by n, so query_is_distinct_for returns true,
therefore the outer query think's it's ok to perform an INNER JOIN rather
than a SEMI join, which is this case produces an extra record.
I think we should probably include the logic to test for set returning
functions into query_is_distinct_for.
The attached fixes the problem.
Regards
David Rowley
query_is_distinct_for_fix.patch
Description: Binary data
--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers