On Sat, Jun 30, 2007 at 01:48:51AM -0400, Tom Lane wrote: > Neil Conway <[EMAIL PROTECTED]> writes: > > For the ALTER SEQUENCE case, I think it's also a little weird to > > have an ALTER SEQUENCE command that modifies some of the > > properties of a sequence, but not the sequence's name. While that > > argument doesn't apply to ALTER VIEW at the moment, recent history > > suggests that it may only be a matter of time before we need to > > add an ALTER VIEW command anyway... > > OK, that's a fairly convincing argument. Fire away. > > (I'm still not sure you found all the relevant places in the > documentation, however.)
Here's a new patch + file. This one allows ALTER [SEQUENCE | VIEW] to work only on the respective database objects, but permits the old ALTER TABLE syntax. Cheers, David. -- David Fetter <[EMAIL PROTECTED]> 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
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 1 Jul 2007 19:42:33 -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 1 Jul 2007 19:42:33 -0000 *************** *** 25,30 **** --- 25,31 ---- <!entity alterTrigger system "alter_trigger.sgml"> <!entity alterType system "alter_type.sgml"> <!entity alterUser system "alter_user.sgml"> + <!entity alterView system "alter_view.sgml"> <!entity analyze system "analyze.sgml"> <!entity begin system "begin.sgml"> <!entity checkpoint system "checkpoint.sgml"> 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 1 Jul 2007 19:42:34 -0000 *************** *** 29,34 **** --- 29,35 ---- [ RESTART [ WITH ] <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ] [ OWNED BY { <replaceable class="parameter">table</replaceable>.<replaceable class="parameter">column</replaceable> | NONE } ] ALTER SEQUENCE <replaceable class="parameter">name</replaceable> SET SCHEMA <replaceable class="parameter">new_schema</replaceable> + ALTER SEQUENCE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable> </synopsis> </refsynopsisdiv> *************** *** 190,195 **** --- 191,207 ---- </para> </listitem> </varlistentry> + + <varlistentry> + <term><literal>RENAME TO</literal> <replaceable class="parameter">new_name</replaceable></term> + <listitem> + <para> + The <literal>RENAME TO</literal> option causes the sequence to be + renamed. + </para> + </listitem> + </varlistentry> + </variablelist> </para> </refsect1> 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 1 Jul 2007 19:42:34 -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: { /* *************** *** 113,119 **** aclcheck_error(aclresult, ACL_KIND_NAMESPACE, get_namespace_name(namespaceId)); ! renamerel(relid, stmt->newname); break; } case OBJECT_COLUMN: --- 117,123 ---- aclcheck_error(aclresult, ACL_KIND_NAMESPACE, get_namespace_name(namespaceId)); ! renamerel(relid, stmt->newname, stmt->renameType); break; } case OBJECT_COLUMN: 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 1 Jul 2007 19:42:35 -0000 *************** *** 41,46 **** --- 41,47 ---- #include "executor/executor.h" #include "miscadmin.h" #include "nodes/makefuncs.h" + #include "nodes/parsenodes.h" #include "optimizer/clauses.h" #include "optimizer/plancat.h" #include "optimizer/prep.h" *************** *** 1621,1627 **** * sequence, AFAIK there's no need for it to be there. */ void ! renamerel(Oid myrelid, const char *newrelname) { Relation targetrelation; Relation relrelation; /* for RELATION relation */ --- 1622,1628 ---- * sequence, AFAIK there's no need for it to be there. */ void ! renamerel(Oid myrelid, const char *newrelname, ObjectType newreltype) { Relation targetrelation; Relation relrelation; /* for RELATION relation */ *************** *** 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); --- 1634,1641 ---- 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); *************** *** 1648,1653 **** --- 1649,1662 ---- RelationGetRelationName(targetrelation)))); relkind = targetrelation->rd_rel->relkind; + if (newreltype == OBJECT_SEQUENCE && relkind != 'S') + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("You can only call ALTER SEQUENCE on a sequence"))); + if (newreltype == OBJECT_VIEW && relkind != 'v') + ereport(ERROR, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("You can only call ALTER VIEW on a view"))); relhastriggers = (targetrelation->rd_rel->reltriggers > 0); /* 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 1 Jul 2007 19:42:36 -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 1 Jul 2007 19:42:37 -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 1 Jul 2007 19:42:37 -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 <name> */ + 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 <name>, add ON */ else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && pg_strcasecmp(prev2_wd, "TRIGGER") == 0) Index: src/include/commands/tablecmds.h =================================================================== RCS file: /projects/cvsroot/pgsql/src/include/commands/tablecmds.h,v retrieving revision 1.33 diff -c -r1.33 tablecmds.h *** src/include/commands/tablecmds.h 11 May 2007 20:17:10 -0000 1.33 --- src/include/commands/tablecmds.h 1 Jul 2007 19:42:37 -0000 *************** *** 43,49 **** bool recursing); extern void renamerel(Oid myrelid, ! const char *newrelname); extern void find_composite_type_dependencies(Oid typeOid, const char *origTblName, --- 43,50 ---- bool recursing); extern void renamerel(Oid myrelid, ! const char *newrelname, ! ObjectType newreltype); extern void find_composite_type_dependencies(Oid typeOid, const char *origTblName,
<!-- $PostgreSQL: pgsql/doc/src/sgml/ref/alter_view.sgml,v 1.0 Fri Jun 29 2007 fetter Exp $ PostgreSQL documentation --> <refentry id="SQL-ALTERVIEW"> <refmeta> <refentrytitle id="SQL-ALTERVIEW-TITLE">ALTER VIEW</refentrytitle> <refmiscinfo>SQL - Language Statements</refmiscinfo> </refmeta> <refnamediv> <refname>ALTER VIEW</refname> <refpurpose>change a view</refpurpose> </refnamediv> <indexterm zone="sql-alterview"> <primary>ALTER VIEW</primary> </indexterm> <refsynopsisdiv> <synopsis> ALTER VIEW <replaceable>name</replaceable> RENAME TO <replaceable>newname</replaceable> </synopsis> </refsynopsisdiv> <refsect1> <title>Description</title> <para> <command>ALTER VIEW</command> changes the definition of a view. </para> <para> You must own the view to use <command>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 <literal>CREATE</literal> 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.) </para> </refsect1> <refsect1> <title>Parameters</title> <variablelist> <varlistentry> <term><replaceable class="parameter">name</replaceable></term> <listitem> <para> The name (optionally schema-qualified) of an existing view. </para> </listitem> </varlistentry> <varlistentry> <term><replaceable class="parameter">newname</replaceable></term> <listitem> <para> The new name of the view. </para> </listitem> </varlistentry> </variablelist> </refsect1> <refsect1> <title>Examples</title> <para> To rename the view <literal>foo</literal> to <literal>bar</literal>: <programlisting> ALTER VIEW foo RENAME TO bar; </programlisting> </para> <refsect1> <title>Compatibility</title> <para> There is no <command>ALTER VIEW</command> statement in the SQL standard. </para> </refsect1> <refsect1> <title>See Also</title> <simplelist type="inline"> <member><xref linkend="sql-createview" endterm="sql-createview-title"></member> <member><xref linkend="sql-dropview" endterm="sql-dropview-title"></member> </simplelist> </refsect1> </refentry>
---------------------------(end of broadcast)--------------------------- TIP 4: Have you searched our list archives? http://archives.postgresql.org