]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Department of second thoughts: further experimentation with CREATE OR REPLACE
authorTom Lane <tgl@sss.pgh.pa.us>
Tue, 16 Dec 2008 00:56:12 +0000 (00:56 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Tue, 16 Dec 2008 00:56:12 +0000 (00:56 +0000)
VIEW suggests that it'd be worth spelling the error messages out in a little
more detail.  This seems to help with localizing the problem.

src/backend/commands/view.c
src/test/regress/expected/create_view.out

index 3b589d49e813bfed683dc51a48558df78d4e988b..c9cd27d57788753fa3c488d6dd600a4941bd8a66 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.109 2008/12/15 21:35:31 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/commands/view.c,v 1.110 2008/12/16 00:56:12 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -29,6 +29,7 @@
 #include "rewrite/rewriteManip.h"
 #include "rewrite/rewriteSupport.h"
 #include "utils/acl.h"
+#include "utils/builtins.h"
 #include "utils/lsyscache.h"
 #include "utils/rel.h"
 
@@ -263,7 +264,7 @@ checkViewTupleDesc(TupleDesc newdesc, TupleDesc olddesc)
                Form_pg_attribute newattr = newdesc->attrs[i];
                Form_pg_attribute oldattr = olddesc->attrs[i];
 
-               /* XXX not right, but we don't support DROP COL on view anyway */
+               /* XXX msg not right, but we don't support DROP COL on view anyway */
                if (newattr->attisdropped != oldattr->attisdropped)
                        ereport(ERROR,
                                        (errcode(ERRCODE_INVALID_TABLE_DEFINITION),
@@ -272,15 +273,20 @@ checkViewTupleDesc(TupleDesc newdesc, TupleDesc olddesc)
                if (strcmp(NameStr(newattr->attname), NameStr(oldattr->attname)) != 0)
                        ereport(ERROR,
                                        (errcode(ERRCODE_INVALID_TABLE_DEFINITION),
-                                        errmsg("cannot change name of view column \"%s\"",
-                                                       NameStr(oldattr->attname))));
+                                        errmsg("cannot change name of view column \"%s\" to \"%s\"",
+                                                       NameStr(oldattr->attname),
+                                                       NameStr(newattr->attname))));
                /* XXX would it be safe to allow atttypmod to change?  Not sure */
                if (newattr->atttypid != oldattr->atttypid ||
                        newattr->atttypmod != oldattr->atttypmod)
                        ereport(ERROR,
                                        (errcode(ERRCODE_INVALID_TABLE_DEFINITION),
-                                        errmsg("cannot change data type of view column \"%s\"",
-                                                       NameStr(oldattr->attname))));
+                                        errmsg("cannot change data type of view column \"%s\" from %s to %s",
+                                                       NameStr(oldattr->attname),
+                                                       format_type_with_typemod(oldattr->atttypid,
+                                                                                                        oldattr->atttypmod),
+                                                       format_type_with_typemod(newattr->atttypid,
+                                                                                                        newattr->atttypmod))));
                /* We can ignore the remaining attributes of an attribute... */
        }
 
index 90e6c70e572f716e419b3dff0b410d94aa84fd15..04383e43d2dbefb506f81a58d66d6d22f5ed1d58 100644 (file)
@@ -53,11 +53,11 @@ ERROR:  cannot drop columns from view
 -- should fail
 CREATE OR REPLACE VIEW viewtest AS
        SELECT 1, * FROM viewtest_tbl;
-ERROR:  cannot change name of view column "a"
+ERROR:  cannot change name of view column "a" to "?column?"
 -- should fail
 CREATE OR REPLACE VIEW viewtest AS
        SELECT a, b::numeric FROM viewtest_tbl;
-ERROR:  cannot change data type of view column "b"
+ERROR:  cannot change data type of view column "b" from integer to numeric
 -- should work 
 CREATE OR REPLACE VIEW viewtest AS
        SELECT a, b, 0 AS c FROM viewtest_tbl;