Re: Example query causing param_info to be set in plain rel path
От | Ashutosh Bapat |
---|---|
Тема | Re: Example query causing param_info to be set in plain rel path |
Дата | |
Msg-id | CAFjFpRea1G0Obs2KobCq=H5J72yfo45St7JX6p3MKzMX_BTSRA@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Example query causing param_info to be set in plain rel path (Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>) |
Список | pgsql-hackers |
I got an example where paths for plain rel require param_info i.e. plain rel scans require to take care of the lateral references. Here's the example from PG regression
explain verbose select v.* from
(int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)
left join int4_tbl z on z.f1 = x.q2,
lateral (select x.q1,y.q1 from dual union all select x.q2,y.q2 from dual) v(vx,vy);
There is note in create_scan_plan(), which says,explain verbose select v.* from
(int8_tbl x left join (select q1,(select coalesce(q2,0)) q2 from int8_tbl) y on x.q2 = y.q1)
left join int4_tbl z on z.f1 = x.q2,
lateral (select x.q1,y.q1 from dual union all select x.q2,y.q2 from dual) v(vx,vy);
324 * If it's a parameterized otherrel, there might be lateral references
325 * in the tlist, which need to be replaced with Params. This cannot
326 * happen for regular baserels, though. Note use_physical_tlist()
327 * always fails for otherrels, so we don't need to check this above.
328 */
On Mon, Oct 28, 2013 at 12:30 PM, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> wrote:
If it's so hard to come up with an example query which would cause lateral_relids to be set in RelOptInfo of a table, then it's very likely that relevant code is untested in PostgreSQL.No adding OFFSET there too didn't give the expected result. The lateral was handled in subquery and passed as param to the underlying table scan.I am particularly interested in tables (unlike functions or subqueries) since, the table scans are shipped to the datanodes and I wanted to test the effect of lateral in such cases. OTH, functions involving access to the tables or subqueries are initiated on the coordinators, where lateral gets executed in the same way as PostgreSQL.On Fri, Oct 25, 2013 at 7:11 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> writes:I think you need a lateral reference in a function or VALUES FROM-item.
> In order to test various cases of LATERAL join in Postgres-XC, I am trying
> to find a query where RelOptInof->lateral_relids would get set for plain
> base relations.
As you say, plain sub-selects are likely to get flattened. (Possibly
if you stuck in a flattening fence such as OFFSET 0, you could get the
case to happen with a sub-select FROM item, but I'm too lazy to check.)
regards, tom lane--Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
--
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company
В списке pgsql-hackers по дате отправления: