Re: postgres_fdw behaves oddly

From: Bruce Momjian <bruce(at)momjian(dot)us>
To: Etsuro Fujita <fujita(dot)etsuro(at)lab(dot)ntt(dot)co(dot)jp>
Cc: PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: postgres_fdw behaves oddly
Date: 2014-10-13 19:30:16
Message-ID: 20141013193016.GD21267@momjian.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


Uh, where are we on this patch?

---------------------------------------------------------------------------

On Mon, Sep 8, 2014 at 09:30:32PM +0900, Etsuro Fujita wrote:
> (2014/09/02 18:55), Etsuro Fujita wrote:
> > (2014/09/01 20:15), Etsuro Fujita wrote:
> >> While working on [1], I've found that postgres_fdw behaves oddly:
>
> I've revised the patch a bit further. Please find attached a patch.
>
> Thanks,
>
> Best regards,
> Etsuro Fujita

> *** a/contrib/postgres_fdw/deparse.c
> --- b/contrib/postgres_fdw/deparse.c
> ***************
> *** 252,257 **** foreign_expr_walker(Node *node,
> --- 252,265 ----
> if (var->varno == glob_cxt->foreignrel->relid &&
> var->varlevelsup == 0)
> {
> + /*
> + * System columns can't be sent to remote.
> + *
> + * XXX: we should probably send ctid to remote.
> + */
> + if (var->varattno < 0)
> + return false;
> +
> /* Var belongs to foreign table */
> collation = var->varcollid;
> state = OidIsValid(collation) ? FDW_COLLATE_SAFE : FDW_COLLATE_NONE;
> ***************
> *** 1261,1266 **** deparseVar(Var *node, deparse_expr_cxt *context)
> --- 1269,1279 ----
> if (node->varno == context->foreignrel->relid &&
> node->varlevelsup == 0)
> {
> + /*
> + * System columns shouldn't be examined here.
> + */
> + Assert(node->varattno >= 0);
> +
> /* Var belongs to foreign table */
> deparseColumnRef(buf, node->varno, node->varattno, context->root);
> }
> *** a/src/backend/optimizer/plan/createplan.c
> --- b/src/backend/optimizer/plan/createplan.c
> ***************
> *** 20,25 ****
> --- 20,26 ----
> #include <math.h>
>
> #include "access/skey.h"
> + #include "access/sysattr.h"
> #include "catalog/pg_class.h"
> #include "foreign/fdwapi.h"
> #include "miscadmin.h"
> ***************
> *** 1945,1950 **** create_foreignscan_plan(PlannerInfo *root, ForeignPath *best_path,
> --- 1946,1953 ----
> RelOptInfo *rel = best_path->path.parent;
> Index scan_relid = rel->relid;
> RangeTblEntry *rte;
> + Bitmapset *attrs_used = NULL;
> + ListCell *lc;
> int i;
>
> /* it should be a base rel... */
> ***************
> *** 1993,2008 **** create_foreignscan_plan(PlannerInfo *root, ForeignPath *best_path,
> * bit of a kluge and might go away someday, so we intentionally leave it
> * out of the API presented to FDWs.
> */
> scan_plan->fsSystemCol = false;
> for (i = rel->min_attr; i < 0; i++)
> {
> ! if (!bms_is_empty(rel->attr_needed[i - rel->min_attr]))
> {
> scan_plan->fsSystemCol = true;
> break;
> }
> }
>
> return scan_plan;
> }
>
> --- 1996,2030 ----
> * bit of a kluge and might go away someday, so we intentionally leave it
> * out of the API presented to FDWs.
> */
> +
> + /*
> + * Add all the attributes needed for joins or final output. Note: we must
> + * look at reltargetlist, not the attr_needed data, because attr_needed
> + * isn't computed for inheritance child rels.
> + */
> + pull_varattnos((Node *) rel->reltargetlist, rel->relid, &attrs_used);
> +
> + /* Add all the attributes used by restriction clauses. */
> + foreach(lc, rel->baserestrictinfo)
> + {
> + RestrictInfo *rinfo = (RestrictInfo *) lfirst(lc);
> +
> + pull_varattnos((Node *) rinfo->clause, rel->relid, &attrs_used);
> + }
> +
> + /* Are any system columns requested from rel? */
> scan_plan->fsSystemCol = false;
> for (i = rel->min_attr; i < 0; i++)
> {
> ! if (bms_is_member(i - FirstLowInvalidHeapAttributeNumber, attrs_used))
> {
> scan_plan->fsSystemCol = true;
> break;
> }
> }
>
> + bms_free(attrs_used);
> +
> return scan_plan;
> }
>

>
> --
> Sent via pgsql-hackers mailing list (pgsql-hackers(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-hackers

--
Bruce Momjian <bruce(at)momjian(dot)us> http://momjian.us
EnterpriseDB http://enterprisedb.com

+ Everyone has their own god. +

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Alvaro Herrera 2014-10-13 19:38:39 Re: On partitioning
Previous Message Bruce Momjian 2014-10-13 19:27:55 Re: On partitioning