Commit 8f9cc41d authored by Tom Lane's avatar Tom Lane

Avoid generating bad remote SQL for INSERT ... DEFAULT VALUES.

"INSERT INTO foo() VALUES ()" is invalid syntax, so don't do that.
parent 41eef0ff
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment