From 8f9cc41daf08be802933dc788517743719ee0949 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Mon, 11 Mar 2013 14:26:05 -0400
Subject: [PATCH] Avoid generating bad remote SQL for INSERT ... DEFAULT
 VALUES.

"INSERT INTO foo() VALUES ()" is invalid syntax, so don't do that.
---
 contrib/postgres_fdw/deparse.c | 52 +++++++++++++++++++---------------
 1 file changed, 29 insertions(+), 23 deletions(-)

diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c
index d667c997609..f5d723cc38a 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);
-- 
GitLab