pgsql: Handle restriction clause lists more uniformly in postgres_fdw.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Handle restriction clause lists more uniformly in postgres_fdw.
Date: 2017-04-11 15:59:20
Message-ID: E1cxyCO-0005JS-77@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Handle restriction clause lists more uniformly in postgres_fdw.

Clauses in the lists retained by postgres_fdw during planning were
sometimes bare boolean clauses, sometimes RestrictInfos, and sometimes
a mixture of the two in the same list. The comment about that situation
didn't come close to telling the full truth, either. Aside from being
confusing, this had a couple of bad practical consequences:
* waste of planning cycles due to inability to cache per-clause selectivity
and cost estimates;
* sometimes, RestrictInfos would sneak into the fdw_private list of a
finished Plan node, causing failures if, for example, we tried to ship
the Plan tree to a parallel worker.
(It may well be that it's a bug in the parallel-query logic that we
would ever try to ship such a plan to a parallel worker, but in any
case this deserves to be cleaned up.)

To fix, rearrange so that clause lists in PgFdwRelationInfo are always
lists of RestrictInfos, and then strip the RestrictInfos at the last
minute when making a Plan node. In passing do a bit of refactoring and
comment cleanup in postgresGetForeignPlan and foreign_join_ok.

Although the messiness here dates back at least to 9.6, there's no evidence
that it causes anything worse than wasted planning cycles in 9.6, so no
back-patch for now.

Per fuzz testing by Andreas Seltenreich.

Tom Lane and Ashutosh Bapat

Discussion: https://postgr.es/m/87tw5x4vcu.fsf@credativ.de

Branch
------
master

Details
-------
http://git.postgresql.org/pg/commitdiff/28b047875554b29837cded70a19384dae107c61a

Modified Files
--------------
contrib/postgres_fdw/deparse.c | 29 ++--
contrib/postgres_fdw/postgres_fdw.c | 260 +++++++++++++++++++++---------------
contrib/postgres_fdw/postgres_fdw.h | 14 +-
3 files changed, 168 insertions(+), 135 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2017-04-11 16:09:14 pgsql: Fix failure when a shared tidbitmap has only one page.
Previous Message Fujii Masao 2017-04-11 15:11:24 pgsql: Add max_sync_workers_per_subscription to postgresql.conf.sample.