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

Reply via email to