From: Tom Lane Date: Mon, 11 Mar 2013 18:26:05 +0000 (-0400) Subject: Avoid generating bad remote SQL for INSERT ... DEFAULT VALUES. X-Git-Tag: REL9_3_BETA1~244 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8f9cc41daf08be802933dc788517743719ee0949;p=postgresql Avoid generating bad remote SQL for INSERT ... DEFAULT VALUES. "INSERT INTO foo() VALUES ()" is invalid syntax, so don't do that. --- diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c index d667c99760..f5d723cc38 100644 --- a/contrib/postgres_fdw/deparse.c +++ b/contrib/postgres_fdw/deparse.c @@ -505,38 +505,44 @@ deparseInsertSql(StringInfo buf, PlannerInfo *root, Index rtindex, appendStringInfoString(buf, "INSERT INTO "); deparseRelation(buf, rte->relid); - appendStringInfoString(buf, "("); - first = true; - foreach(lc, targetAttrs) + if (targetAttrs) { - int attnum = lfirst_int(lc); - Form_pg_attribute attr = tupdesc->attrs[attnum - 1]; + appendStringInfoString(buf, "("); - Assert(!attr->attisdropped); + first = true; + foreach(lc, targetAttrs) + { + int attnum = lfirst_int(lc); + Form_pg_attribute attr = tupdesc->attrs[attnum - 1]; - if (!first) - appendStringInfoString(buf, ", "); - first = false; + Assert(!attr->attisdropped); - deparseColumnRef(buf, rtindex, attnum, root); - } + if (!first) + appendStringInfoString(buf, ", "); + first = false; - appendStringInfoString(buf, ") VALUES ("); + deparseColumnRef(buf, rtindex, attnum, root); + } - pindex = 1; - first = true; - foreach(lc, targetAttrs) - { - if (!first) - appendStringInfoString(buf, ", "); - first = false; + appendStringInfoString(buf, ") VALUES ("); - appendStringInfo(buf, "$%d", pindex); - pindex++; - } + pindex = 1; + first = true; + foreach(lc, targetAttrs) + { + if (!first) + appendStringInfoString(buf, ", "); + first = false; + + appendStringInfo(buf, "$%d", pindex); + pindex++; + } - appendStringInfoString(buf, ")"); + appendStringInfoString(buf, ")"); + } + else + appendStringInfoString(buf, " DEFAULT VALUES"); if (returningList) deparseReturningList(buf, root, rtindex, rel, returningList);