mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-09-27 23:11:50 +02:00
Department of second thoughts: further experimentation with CREATE OR REPLACE
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.
This commit is contained in:
parent
1b92aeb93e
commit
794ec7b063
@ -8,7 +8,7 @@
|
|||||||
*
|
*
|
||||||
*
|
*
|
||||||
* IDENTIFICATION
|
* 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/rewriteManip.h"
|
||||||
#include "rewrite/rewriteSupport.h"
|
#include "rewrite/rewriteSupport.h"
|
||||||
#include "utils/acl.h"
|
#include "utils/acl.h"
|
||||||
|
#include "utils/builtins.h"
|
||||||
#include "utils/lsyscache.h"
|
#include "utils/lsyscache.h"
|
||||||
#include "utils/rel.h"
|
#include "utils/rel.h"
|
||||||
|
|
||||||
@ -263,7 +264,7 @@ checkViewTupleDesc(TupleDesc newdesc, TupleDesc olddesc)
|
|||||||
Form_pg_attribute newattr = newdesc->attrs[i];
|
Form_pg_attribute newattr = newdesc->attrs[i];
|
||||||
Form_pg_attribute oldattr = olddesc->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)
|
if (newattr->attisdropped != oldattr->attisdropped)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
||||||
@ -272,15 +273,20 @@ checkViewTupleDesc(TupleDesc newdesc, TupleDesc olddesc)
|
|||||||
if (strcmp(NameStr(newattr->attname), NameStr(oldattr->attname)) != 0)
|
if (strcmp(NameStr(newattr->attname), NameStr(oldattr->attname)) != 0)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
||||||
errmsg("cannot change name of view column \"%s\"",
|
errmsg("cannot change name of view column \"%s\" to \"%s\"",
|
||||||
NameStr(oldattr->attname))));
|
NameStr(oldattr->attname),
|
||||||
|
NameStr(newattr->attname))));
|
||||||
/* XXX would it be safe to allow atttypmod to change? Not sure */
|
/* XXX would it be safe to allow atttypmod to change? Not sure */
|
||||||
if (newattr->atttypid != oldattr->atttypid ||
|
if (newattr->atttypid != oldattr->atttypid ||
|
||||||
newattr->atttypmod != oldattr->atttypmod)
|
newattr->atttypmod != oldattr->atttypmod)
|
||||||
ereport(ERROR,
|
ereport(ERROR,
|
||||||
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
(errcode(ERRCODE_INVALID_TABLE_DEFINITION),
|
||||||
errmsg("cannot change data type of view column \"%s\"",
|
errmsg("cannot change data type of view column \"%s\" from %s to %s",
|
||||||
NameStr(oldattr->attname))));
|
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... */
|
/* We can ignore the remaining attributes of an attribute... */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,11 +53,11 @@ ERROR: cannot drop columns from view
|
|||||||
-- should fail
|
-- should fail
|
||||||
CREATE OR REPLACE VIEW viewtest AS
|
CREATE OR REPLACE VIEW viewtest AS
|
||||||
SELECT 1, * FROM viewtest_tbl;
|
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
|
-- should fail
|
||||||
CREATE OR REPLACE VIEW viewtest AS
|
CREATE OR REPLACE VIEW viewtest AS
|
||||||
SELECT a, b::numeric FROM viewtest_tbl;
|
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
|
-- should work
|
||||||
CREATE OR REPLACE VIEW viewtest AS
|
CREATE OR REPLACE VIEW viewtest AS
|
||||||
SELECT a, b, 0 AS c FROM viewtest_tbl;
|
SELECT a, b, 0 AS c FROM viewtest_tbl;
|
||||||
|
Loading…
Reference in New Issue
Block a user