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 <[EMAIL PROTECTED]> 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 <[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
<!--
$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>
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 ----
<!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 30 Jun 2007 00:14:47 -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 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 <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)
---------------------------(end of broadcast)---------------------------
TIP 7: You can help support the PostgreSQL project by donating at
http://www.postgresql.org/about/donate