From 4011f8c98bd8bb67715449d2db5fc97dffa6a41f Mon Sep 17 00:00:00 2001
From: Bruce Momjian <bruce@momjian.us>
Date: Wed, 3 Sep 2014 11:54:31 -0400
Subject: [PATCH] Issue clearer notice when inherited merged columns are moved

CREATE TABLE INHERIT moves user-specified columns to the location of the
inherited column.

Report by Fatal Majid
---
 src/backend/commands/tablecmds.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c
index 3720a0fe56..0a679be24e 100644
--- a/src/backend/commands/tablecmds.c
+++ b/src/backend/commands/tablecmds.c
@@ -1756,12 +1756,16 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
 	 */
 	if (inhSchema != NIL)
 	{
+		int		schema_attno = 0;
+
 		foreach(entry, schema)
 		{
 			ColumnDef  *newdef = lfirst(entry);
 			char	   *attributeName = newdef->colname;
 			int			exist_attno;
 
+			schema_attno++;
+
 			/*
 			 * Does it conflict with some previously inherited column?
 			 */
@@ -1780,9 +1784,14 @@ MergeAttributes(List *schema, List *supers, char relpersistence,
 				 * Yes, try to merge the two column definitions. They must
 				 * have the same type, typmod, and collation.
 				 */
-				ereport(NOTICE,
-				   (errmsg("merging column \"%s\" with inherited definition",
-						   attributeName)));
+				 if (exist_attno == schema_attno)
+					ereport(NOTICE,
+					   (errmsg("merging column \"%s\" with inherited definition",
+							   attributeName)));
+				else
+					ereport(NOTICE,
+					   (errmsg("moving and merging column \"%s\" with inherited definition", attributeName),
+						errdetail("User-specified column moved to the position of the inherited column.")));
 				def = (ColumnDef *) list_nth(inhSchema, exist_attno - 1);
 				typenameTypeIdAndMod(NULL, def->typeName, &defTypeId, &deftypmod);
 				typenameTypeIdAndMod(NULL, newdef->typeName, &newTypeId, &newtypmod);