Re: Expression errors with "FOR UPDATE" and postgres_fdw with partition wise join enabled.
Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
From: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
To: Rajkumar Raghuwanshi <rajkumar.raghuwanshi@enterprisedb.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2018-02-20T09:13:02Z
Lists: pgsql-hackers
Attachments
- expr_ref_error_pwj.tar.gz (application/x-gzip)
On Tue, Feb 13, 2018 at 6:21 PM, Ashutosh Bapat <ashutosh.bapat@enterprisedb.com> wrote: > > 1. Push down ConvertRowtypeExpr and include it in the pushed down targetlist. > This would solve both the problems described above. Both set_plan_ref() and > get_relation_column_alias_ids() will find ConvertRowtypeExpr, they are looking > for and won't throw an error. > > This requires two parts > a. In build_tlist_to_deparse(), instead of pulling > Var node from ConvertRowtypeExpr, we pull whole ConvertRowtypeExpr and include > it in the targetlist being deparsed which is also used as to set > fdw_scan_tlist. In order to pull any ConvertRowtypeExpr's in the local quals, > which may be hidden in the expression tree, we will add two more options to > flags viz. PVC_INCLUDE_CONVERTROWTYPEEXPR and PVC_RECURSE_CONVERTROWTYPEEXPR. > Unlike the other PVC_* options, which do not default to a value, we may want to > default to PVC_RECURSE_CONVERTROWTYPEEXPR if nothing is specified. That will > avoid, possibly updating every pull_var_clause call with > PVC_RECURSE_CONVERTROWTYPEEXPR. > b. deparse ConvertRowtypeExpr > For this we need to get the conversion map between the parent and child. We > then deparse ConvertRowtypeExpr as a ROW() with the attributes of child > rearranged per the conversion map. A multi-level partitioned table will have > nested ConvertRowtypeExpr. To deparse such expressions, we need to find the > conversion map between the topmost parent and the child, by ignoring any > intermediate parents. > > Here's patchset implementing this solution. 0001 adds PVC_*_CONVERTROWTYPEEXPR to pull_var_clause() and adjusts its callers. 0002 fixes a similar bug for regular partitioned tables. The patch has testcase. The commit message explains the bug in more detail. 0003 has postgres_fdw fixes as outlined above with tests. -- Best Wishes, Ashutosh Bapat EnterpriseDB Corporation The Postgres Database Company
Commits
-
Adjust EXPLAIN's output for disabled nodes
- 161320b4b960 18.0 cited
-
Disable support for partitionwise joins in problematic cases.
- 940487956ede 11.0 landed
- 7cfdc77023ad 12.0 landed
-
Rewrite the code that applies scan/join targets to paths.
- 11cf92f6e2e1 11.0 cited