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);