diff options
author | Robert Haas <rhaas@postgresql.org> | 2016-07-01 11:29:25 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2016-07-01 11:29:25 -0400 |
commit | 86437ddf8c8da6fff49bdf08a22af3460e078eeb (patch) | |
tree | f2e6225d8c285761c16c4e6f0afa6ad4ef7bfdaa /contrib/postgres_fdw/postgres_fdw.c | |
parent | 5f3499b2b5455a2966faee30fd3f6d2776219858 (diff) | |
download | postgresql-86437ddf8c8da6fff49bdf08a22af3460e078eeb.tar.gz postgresql-86437ddf8c8da6fff49bdf08a22af3460e078eeb.zip |
postgres_fdw: Fix cache lookup failure while creating error context.
This is fallout from join pushdown; get_relid_attribute_name can't
handle an attribute number of 0, indicating a whole-row reference,
and shouldn't be called in that case.
Etsuro Fujita, reviewed by Ashutosh Bapat
Diffstat (limited to 'contrib/postgres_fdw/postgres_fdw.c')
-rw-r--r-- | contrib/postgres_fdw/postgres_fdw.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c index ccfad1b82a3..93ebd8cab68 100644 --- a/contrib/postgres_fdw/postgres_fdw.c +++ b/contrib/postgres_fdw/postgres_fdw.c @@ -4528,6 +4528,7 @@ conversion_error_callback(void *arg) { const char *attname = NULL; const char *relname = NULL; + bool is_wholerow = false; ConversionLocation *errpos = (ConversionLocation *) arg; if (errpos->rel) @@ -4560,12 +4561,22 @@ conversion_error_callback(void *arg) Assert(IsA(var, Var)); rte = rt_fetch(var->varno, estate->es_range_table); + + if (var->varattno == 0) + is_wholerow = true; + else + attname = get_relid_attribute_name(rte->relid, var->varattno); + relname = get_rel_name(rte->relid); - attname = get_relid_attribute_name(rte->relid, var->varattno); } - if (attname && relname) - errcontext("column \"%s\" of foreign table \"%s\"", attname, relname); + if (relname) + { + if (is_wholerow) + errcontext("whole-row reference to foreign table \"%s\"", relname); + else if (attname) + errcontext("column \"%s\" of foreign table \"%s\"", attname, relname); + } } /* |