Received: from localhost (maia-1.hub.org [200.46.204.191]) by postgresql.org (Postfix) with ESMTP id C55BB9FC482 for ; Fri, 29 Jun 2007 21:17:00 -0300 (ADT) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.191]) (amavisd-maia, port 10024) with ESMTP id 67950-09 for ; Fri, 29 Jun 2007 21:16:55 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.4 Received: from fetter.org (start.fetter.org [66.92.188.65]) by postgresql.org (Postfix) with ESMTP id 43D249FC481 for ; Fri, 29 Jun 2007 21:16:55 -0300 (ADT) Received: by fetter.org (Postfix, from userid 500) id 77110FBC6D7; Fri, 29 Jun 2007 17:16:53 -0700 (PDT) Date: Fri, 29 Jun 2007 17:16:53 -0700 From: David Fetter To: Tom Lane Cc: Susanne Ebrecht , pgsql-docs@postgresql.org Subject: Re: rename of a view Message-ID: <20070630001653.GQ7636@fetter.org> References: <46839C05.7050307@miracee.de> <3450.1183040211@sss.pgh.pa.us> <20070629183219.GO7636@fetter.org> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="MGYHOYXEY6WxJCY8" Content-Disposition: inline In-Reply-To: <20070629183219.GO7636@fetter.org> User-Agent: Mutt/1.5.14 (2007-02-12) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200706/31 X-Sequence-Number: 4320 --MGYHOYXEY6WxJCY8 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Fri, Jun 29, 2007 at 11:32:19AM -0700, David Fetter wrote: > On Thu, Jun 28, 2007 at 10:16:51AM -0400, Tom Lane wrote: > > Susanne Ebrecht writes: > > > that works, but there is no hint at the documentation, that you > > > can rename a view via alter table. > > > > It is mentioned someplace (don't remember where). Where would you > > have expected to find it? > > I'd expect to find it in an ALTER VIEW document. > > Cheers, > D The attached patch and file implement and document ALTER [VIEW | SEQUENCE] RENAME TO The file goes in doc/src/sgml/ref and the patch should just apply to CVS HEAD. Thanks to Neil Conway for all the help putting this together :) Cheers, D -- David Fetter http://fetter.org/ phone: +1 415 235 3778 AIM: dfetter666 Skype: davidfetter Remember to vote! Consider donating to PostgreSQL: http://www.postgresql.org/about/donate --MGYHOYXEY6WxJCY8 Content-Type: text/sgml; charset=us-ascii Content-Disposition: attachment; filename="alter_view.sgml" ALTER VIEW SQL - Language Statements ALTER VIEW change a view ALTER VIEW ALTER VIEW name RENAME TO newname Description ALTER VIEW changes the definition of a view. You must own the view to use ALTER VIEW. To alter the owner, you must also be a direct or indirect member of the new owning role, and that role must have CREATE privilege on the view's schema. (These restrictions enforce that altering the owner doesn't do anything you couldn't do by dropping and recreating the view. However, a superuser can alter ownership of any view anyway.) Parameters name The name (optionally schema-qualified) of an existing view. newname The new name of the view. Examples To rename the view foo to bar: ALTER VIEW foo RENAME TO bar; Compatibility There is no ALTER VIEW statement in the SQL standard. See Also --MGYHOYXEY6WxJCY8 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="alter_view_sequence.diff" Index: doc/src/sgml/reference.sgml =================================================================== RCS file: /projects/cvsroot/pgsql/doc/src/sgml/reference.sgml,v retrieving revision 1.63 diff -c -r1.63 reference.sgml *** doc/src/sgml/reference.sgml 26 Apr 2007 16:13:08 -0000 1.63 --- doc/src/sgml/reference.sgml 30 Jun 2007 00:14:47 -0000 *************** *** 53,58 **** --- 53,59 ---- &alterTrigger; &alterType; &alterUser; + &alterView; &analyze; &begin; &checkpoint; Index: doc/src/sgml/ref/allfiles.sgml =================================================================== RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/allfiles.sgml,v retrieving revision 1.70 diff -c -r1.70 allfiles.sgml *** doc/src/sgml/ref/allfiles.sgml 26 Apr 2007 16:13:08 -0000 1.70 --- doc/src/sgml/ref/allfiles.sgml 30 Jun 2007 00:14:47 -0000 *************** *** 25,30 **** --- 25,31 ---- + Index: doc/src/sgml/ref/alter_sequence.sgml =================================================================== RCS file: /projects/cvsroot/pgsql/doc/src/sgml/ref/alter_sequence.sgml,v retrieving revision 1.16 diff -c -r1.16 alter_sequence.sgml *** doc/src/sgml/ref/alter_sequence.sgml 31 Jan 2007 23:26:02 -0000 1.16 --- doc/src/sgml/ref/alter_sequence.sgml 30 Jun 2007 00:14:47 -0000 *************** *** 29,34 **** --- 29,35 ---- [ RESTART [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE ] [ OWNED BY { table.column | NONE } ] ALTER SEQUENCE name SET SCHEMA new_schema + ALTER SEQUENCE name RENAME TO new_name *************** *** 190,195 **** --- 191,207 ---- + + + RENAME TO new_name + + + The RENAME TO option causes the sequence to be + renamed. + + + + Index: src/backend/commands/alter.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/commands/alter.c,v retrieving revision 1.23 diff -c -r1.23 alter.c *** src/backend/commands/alter.c 26 Mar 2007 16:58:38 -0000 1.23 --- src/backend/commands/alter.c 30 Jun 2007 00:14:47 -0000 *************** *** 83,88 **** --- 83,90 ---- break; case OBJECT_TABLE: + case OBJECT_SEQUENCE: + case OBJECT_VIEW: case OBJECT_INDEX: case OBJECT_COLUMN: case OBJECT_TRIGGER: *************** *** 96,101 **** --- 98,105 ---- switch (stmt->renameType) { case OBJECT_TABLE: + case OBJECT_SEQUENCE: + case OBJECT_VIEW: case OBJECT_INDEX: { /* Index: src/backend/commands/tablecmds.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/commands/tablecmds.c,v retrieving revision 1.228 diff -c -r1.228 tablecmds.c *** src/backend/commands/tablecmds.c 23 Jun 2007 22:12:50 -0000 1.228 --- src/backend/commands/tablecmds.c 30 Jun 2007 00:14:48 -0000 *************** *** 1633,1640 **** bool relhastriggers; /* ! * Grab an exclusive lock on the target table or index, which we will NOT ! * release until end of transaction. */ targetrelation = relation_open(myrelid, AccessExclusiveLock); --- 1633,1640 ---- bool relhastriggers; /* ! * Grab an exclusive lock on the target table, index, sequence or ! * view, which we will NOT release until end of transaction. */ targetrelation = relation_open(myrelid, AccessExclusiveLock); Index: src/backend/parser/gram.y =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/parser/gram.y,v retrieving revision 2.596 diff -c -r2.596 gram.y *** src/backend/parser/gram.y 23 Jun 2007 22:12:51 -0000 2.596 --- src/backend/parser/gram.y 30 Jun 2007 00:14:50 -0000 *************** *** 4546,4551 **** --- 4546,4569 ---- n->newname = $6; $$ = (Node *)n; } + | ALTER SEQUENCE relation_expr RENAME TO name + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_SEQUENCE; + n->relation = $3; + n->subname = NULL; + n->newname = $6; + $$ = (Node *)n; + } + | ALTER VIEW relation_expr RENAME TO name + { + RenameStmt *n = makeNode(RenameStmt); + n->renameType = OBJECT_VIEW; + n->relation = $3; + n->subname = NULL; + n->newname = $6; + $$ = (Node *)n; + } | ALTER INDEX relation_expr RENAME TO name { RenameStmt *n = makeNode(RenameStmt); Index: src/backend/tcop/utility.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/tcop/utility.c,v retrieving revision 1.282 diff -c -r1.282 utility.c *** src/backend/tcop/utility.c 28 Jun 2007 00:02:39 -0000 1.282 --- src/backend/tcop/utility.c 30 Jun 2007 00:14:50 -0000 *************** *** 1574,1579 **** --- 1574,1582 ---- case OBJECT_SCHEMA: tag = "ALTER SCHEMA"; break; + case OBJECT_SEQUENCE: + tag = "ALTER SEQUENCE"; + break; case OBJECT_COLUMN: case OBJECT_TABLE: tag = "ALTER TABLE"; *************** *** 1584,1589 **** --- 1587,1595 ---- case OBJECT_TRIGGER: tag = "ALTER TRIGGER"; break; + case OBJECT_VIEW: + tag = "ALTER VIEW"; + break; default: tag = "???"; break; Index: src/bin/psql/tab-complete.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/bin/psql/tab-complete.c,v retrieving revision 1.165 diff -c -r1.165 tab-complete.c *** src/bin/psql/tab-complete.c 13 Jun 2007 23:59:47 -0000 1.165 --- src/bin/psql/tab-complete.c 30 Jun 2007 00:14:51 -0000 *************** *** 602,608 **** static const char *const list_ALTER[] = {"AGGREGATE", "CONVERSION", "DATABASE", "DOMAIN", "FUNCTION", "GROUP", "INDEX", "LANGUAGE", "OPERATOR", "ROLE", "SCHEMA", "SEQUENCE", "TABLE", ! "TABLESPACE", "TRIGGER", "TYPE", "USER", NULL}; COMPLETE_WITH_LIST(list_ALTER); } --- 602,608 ---- static const char *const list_ALTER[] = {"AGGREGATE", "CONVERSION", "DATABASE", "DOMAIN", "FUNCTION", "GROUP", "INDEX", "LANGUAGE", "OPERATOR", "ROLE", "SCHEMA", "SEQUENCE", "TABLE", ! "TABLESPACE", "TRIGGER", "TYPE", "USER", "VIEW", NULL}; COMPLETE_WITH_LIST(list_ALTER); } *************** *** 714,720 **** { static const char *const list_ALTERSEQUENCE[] = {"INCREMENT", "MINVALUE", "MAXVALUE", "RESTART", "NO", "CACHE", "CYCLE", ! "SET SCHEMA", NULL}; COMPLETE_WITH_LIST(list_ALTERSEQUENCE); } --- 714,720 ---- { static const char *const list_ALTERSEQUENCE[] = {"INCREMENT", "MINVALUE", "MAXVALUE", "RESTART", "NO", "CACHE", "CYCLE", ! "SET SCHEMA", "RENAME TO", NULL}; COMPLETE_WITH_LIST(list_ALTERSEQUENCE); } *************** *** 728,733 **** --- 728,742 ---- COMPLETE_WITH_LIST(list_ALTERSEQUENCE2); } + /* ALTER VIEW */ + else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && + pg_strcasecmp(prev2_wd, "VIEW") == 0) + { + static const char *const list_ALTERVIEW[] = + {"RENAME TO"}; + + COMPLETE_WITH_LIST(list_ALTERVIEW); + } /* ALTER TRIGGER , add ON */ else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && pg_strcasecmp(prev2_wd, "TRIGGER") == 0) --MGYHOYXEY6WxJCY8--