Commit a5589813 authored by Neil Conway's avatar Neil Conway

Add ALTER VIEW ... RENAME TO, and a RENAME TO clause to ALTER SEQUENCE.

Sequences and views could previously be renamed using ALTER TABLE, but
this was a repeated source of confusion for users. Update the docs,
and psql tab completion. Patch from David Fetter; various minor fixes
by myself.
parent a1587e41
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.70 2007/04/26 16:13:08 neilc Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/allfiles.sgml,v 1.71 2007/07/03 01:30:35 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
Complete list of usable sgml source files in this directory. Complete list of usable sgml source files in this directory.
--> -->
...@@ -25,6 +25,7 @@ Complete list of usable sgml source files in this directory. ...@@ -25,6 +25,7 @@ Complete list of usable sgml source files in this directory.
<!entity alterTrigger system "alter_trigger.sgml"> <!entity alterTrigger system "alter_trigger.sgml">
<!entity alterType system "alter_type.sgml"> <!entity alterType system "alter_type.sgml">
<!entity alterUser system "alter_user.sgml"> <!entity alterUser system "alter_user.sgml">
<!entity alterView system "alter_view.sgml">
<!entity analyze system "analyze.sgml"> <!entity analyze system "analyze.sgml">
<!entity begin system "begin.sgml"> <!entity begin system "begin.sgml">
<!entity checkpoint system "checkpoint.sgml"> <!entity checkpoint system "checkpoint.sgml">
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/alter_sequence.sgml,v 1.16 2007/01/31 23:26:02 momjian Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/alter_sequence.sgml,v 1.17 2007/07/03 01:30:35 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -29,6 +29,7 @@ ALTER SEQUENCE <replaceable class="parameter">name</replaceable> [ INCREMENT [ B ...@@ -29,6 +29,7 @@ ALTER SEQUENCE <replaceable class="parameter">name</replaceable> [ INCREMENT [ B
[ RESTART [ WITH ] <replaceable class="parameter">start</replaceable> ] [ CACHE <replaceable class="parameter">cache</replaceable> ] [ [ NO ] CYCLE ] [ 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 } ] [ 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> SET SCHEMA <replaceable class="parameter">new_schema</replaceable>
ALTER SEQUENCE <replaceable class="parameter">name</replaceable> RENAME TO <replaceable class="parameter">new_name</replaceable>
</synopsis> </synopsis>
</refsynopsisdiv> </refsynopsisdiv>
...@@ -190,6 +191,16 @@ ALTER SEQUENCE <replaceable class="parameter">name</replaceable> SET SCHEMA <rep ...@@ -190,6 +191,16 @@ ALTER SEQUENCE <replaceable class="parameter">name</replaceable> SET SCHEMA <rep
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term><replaceable class="parameter">new_name</replaceable></term>
<listitem>
<para>
The new name for the sequence.
</para>
</listitem>
</varlistentry>
</variablelist> </variablelist>
</para> </para>
</refsect1> </refsect1>
......
<!--
$PostgreSQL: pgsql/doc/src/sgml/ref/alter_view.sgml,v 1.1 2007/07/03 01:30:35 neilc 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 the definition of 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. To execute this command you must be the owner of the view.
</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>
<command>ALTER VIEW</command> is a <productname>PostgreSQL</>
extension of 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>
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/create_view.sgml,v 1.35 2007/02/01 00:28:18 momjian Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/create_view.sgml,v 1.36 2007/07/03 01:30:35 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -226,6 +226,7 @@ CREATE VIEW <replaceable class="parameter">name</replaceable> [ ( <replaceable c ...@@ -226,6 +226,7 @@ CREATE VIEW <replaceable class="parameter">name</replaceable> [ ( <replaceable c
<title>See Also</title> <title>See Also</title>
<simplelist type="inline"> <simplelist type="inline">
<member><xref linkend="sql-alterview" endterm="sql-alterview-title"></member>
<member><xref linkend="sql-dropview" endterm="sql-dropview-title"></member> <member><xref linkend="sql-dropview" endterm="sql-dropview-title"></member>
</simplelist> </simplelist>
</refsect1> </refsect1>
......
<!-- <!--
$PostgreSQL: pgsql/doc/src/sgml/ref/drop_view.sgml,v 1.23 2006/09/16 00:30:18 momjian Exp $ $PostgreSQL: pgsql/doc/src/sgml/ref/drop_view.sgml,v 1.24 2007/07/03 01:30:35 neilc Exp $
PostgreSQL documentation PostgreSQL documentation
--> -->
...@@ -104,6 +104,7 @@ DROP VIEW kinds; ...@@ -104,6 +104,7 @@ DROP VIEW kinds;
<title>See Also</title> <title>See Also</title>
<simplelist type="inline"> <simplelist type="inline">
<member><xref linkend="sql-alterview" endterm="sql-alterview-title"></member>
<member><xref linkend="sql-createview" endterm="sql-createview-title"></member> <member><xref linkend="sql-createview" endterm="sql-createview-title"></member>
</simplelist> </simplelist>
</refsect1> </refsect1>
......
<!-- $PostgreSQL: pgsql/doc/src/sgml/reference.sgml,v 1.63 2007/04/26 16:13:08 neilc Exp $ --> <!-- $PostgreSQL: pgsql/doc/src/sgml/reference.sgml,v 1.64 2007/07/03 01:30:35 neilc Exp $ -->
<part id="reference"> <part id="reference">
<title>Reference</title> <title>Reference</title>
...@@ -53,6 +53,7 @@ ...@@ -53,6 +53,7 @@
&alterTrigger; &alterTrigger;
&alterType; &alterType;
&alterUser; &alterUser;
&alterView;
&analyze; &analyze;
&begin; &begin;
&checkpoint; &checkpoint;
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/alter.c,v 1.23 2007/03/26 16:58:38 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/alter.c,v 1.24 2007/07/03 01:30:36 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -83,6 +83,8 @@ ExecRenameStmt(RenameStmt *stmt) ...@@ -83,6 +83,8 @@ ExecRenameStmt(RenameStmt *stmt)
break; break;
case OBJECT_TABLE: case OBJECT_TABLE:
case OBJECT_SEQUENCE:
case OBJECT_VIEW:
case OBJECT_INDEX: case OBJECT_INDEX:
case OBJECT_COLUMN: case OBJECT_COLUMN:
case OBJECT_TRIGGER: case OBJECT_TRIGGER:
...@@ -96,6 +98,8 @@ ExecRenameStmt(RenameStmt *stmt) ...@@ -96,6 +98,8 @@ ExecRenameStmt(RenameStmt *stmt)
switch (stmt->renameType) switch (stmt->renameType)
{ {
case OBJECT_TABLE: case OBJECT_TABLE:
case OBJECT_SEQUENCE:
case OBJECT_VIEW:
case OBJECT_INDEX: case OBJECT_INDEX:
{ {
/* /*
...@@ -113,7 +117,7 @@ ExecRenameStmt(RenameStmt *stmt) ...@@ -113,7 +117,7 @@ ExecRenameStmt(RenameStmt *stmt)
aclcheck_error(aclresult, ACL_KIND_NAMESPACE, aclcheck_error(aclresult, ACL_KIND_NAMESPACE,
get_namespace_name(namespaceId)); get_namespace_name(namespaceId));
renamerel(relid, stmt->newname); renamerel(relid, stmt->newname, stmt->renameType);
break; break;
} }
case OBJECT_COLUMN: case OBJECT_COLUMN:
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.228 2007/06/23 22:12:50 tgl Exp $ * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.229 2007/07/03 01:30:36 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -41,6 +41,7 @@ ...@@ -41,6 +41,7 @@
#include "executor/executor.h" #include "executor/executor.h"
#include "miscadmin.h" #include "miscadmin.h"
#include "nodes/makefuncs.h" #include "nodes/makefuncs.h"
#include "nodes/parsenodes.h"
#include "optimizer/clauses.h" #include "optimizer/clauses.h"
#include "optimizer/plancat.h" #include "optimizer/plancat.h"
#include "optimizer/prep.h" #include "optimizer/prep.h"
...@@ -1621,7 +1622,7 @@ renameatt(Oid myrelid, ...@@ -1621,7 +1622,7 @@ renameatt(Oid myrelid,
* sequence, AFAIK there's no need for it to be there. * sequence, AFAIK there's no need for it to be there.
*/ */
void void
renamerel(Oid myrelid, const char *newrelname) renamerel(Oid myrelid, const char *newrelname, ObjectType reltype)
{ {
Relation targetrelation; Relation targetrelation;
Relation relrelation; /* for RELATION relation */ Relation relrelation; /* for RELATION relation */
...@@ -1633,8 +1634,8 @@ renamerel(Oid myrelid, const char *newrelname) ...@@ -1633,8 +1634,8 @@ renamerel(Oid myrelid, const char *newrelname)
bool relhastriggers; bool relhastriggers;
/* /*
* Grab an exclusive lock on the target table or index, which we will NOT * Grab an exclusive lock on the target table, index, sequence or
* release until end of transaction. * view, which we will NOT release until end of transaction.
*/ */
targetrelation = relation_open(myrelid, AccessExclusiveLock); targetrelation = relation_open(myrelid, AccessExclusiveLock);
...@@ -1647,7 +1648,24 @@ renamerel(Oid myrelid, const char *newrelname) ...@@ -1647,7 +1648,24 @@ renamerel(Oid myrelid, const char *newrelname)
errmsg("permission denied: \"%s\" is a system catalog", errmsg("permission denied: \"%s\" is a system catalog",
RelationGetRelationName(targetrelation)))); RelationGetRelationName(targetrelation))));
/*
* For compatibility with prior releases, we don't complain if
* ALTER TABLE or ALTER INDEX is used to rename a sequence or
* view.
*/
relkind = targetrelation->rd_rel->relkind; relkind = targetrelation->rd_rel->relkind;
if (reltype == OBJECT_SEQUENCE && relkind != 'S')
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("\"%s\" is not a sequence",
RelationGetRelationName(targetrelation))));
if (reltype == OBJECT_VIEW && relkind != 'v')
ereport(ERROR,
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
errmsg("\"%s\" is not a view",
RelationGetRelationName(targetrelation))));
relhastriggers = (targetrelation->rd_rel->reltriggers > 0); relhastriggers = (targetrelation->rd_rel->reltriggers > 0);
/* /*
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.596 2007/06/23 22:12:51 tgl Exp $ * $PostgreSQL: pgsql/src/backend/parser/gram.y,v 2.597 2007/07/03 01:30:36 neilc Exp $
* *
* HISTORY * HISTORY
* AUTHOR DATE MAJOR EVENT * AUTHOR DATE MAJOR EVENT
...@@ -4546,6 +4546,24 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name ...@@ -4546,6 +4546,24 @@ RenameStmt: ALTER AGGREGATE func_name aggr_args RENAME TO name
n->newname = $6; n->newname = $6;
$$ = (Node *)n; $$ = (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 | ALTER INDEX relation_expr RENAME TO name
{ {
RenameStmt *n = makeNode(RenameStmt); RenameStmt *n = makeNode(RenameStmt);
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* *
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.282 2007/06/28 00:02:39 tgl Exp $ * $PostgreSQL: pgsql/src/backend/tcop/utility.c,v 1.283 2007/07/03 01:30:37 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -1574,6 +1574,9 @@ CreateCommandTag(Node *parsetree) ...@@ -1574,6 +1574,9 @@ CreateCommandTag(Node *parsetree)
case OBJECT_SCHEMA: case OBJECT_SCHEMA:
tag = "ALTER SCHEMA"; tag = "ALTER SCHEMA";
break; break;
case OBJECT_SEQUENCE:
tag = "ALTER SEQUENCE";
break;
case OBJECT_COLUMN: case OBJECT_COLUMN:
case OBJECT_TABLE: case OBJECT_TABLE:
tag = "ALTER TABLE"; tag = "ALTER TABLE";
...@@ -1584,6 +1587,9 @@ CreateCommandTag(Node *parsetree) ...@@ -1584,6 +1587,9 @@ CreateCommandTag(Node *parsetree)
case OBJECT_TRIGGER: case OBJECT_TRIGGER:
tag = "ALTER TRIGGER"; tag = "ALTER TRIGGER";
break; break;
case OBJECT_VIEW:
tag = "ALTER VIEW";
break;
default: default:
tag = "???"; tag = "???";
break; break;
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Copyright (c) 2000-2007, PostgreSQL Global Development Group * Copyright (c) 2000-2007, PostgreSQL Global Development Group
* *
* $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.165 2007/06/13 23:59:47 neilc Exp $ * $PostgreSQL: pgsql/src/bin/psql/tab-complete.c,v 1.166 2007/07/03 01:30:37 neilc Exp $
*/ */
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -602,7 +602,7 @@ psql_completion(char *text, int start, int end) ...@@ -602,7 +602,7 @@ psql_completion(char *text, int start, int end)
static const char *const list_ALTER[] = static const char *const list_ALTER[] =
{"AGGREGATE", "CONVERSION", "DATABASE", "DOMAIN", "FUNCTION", {"AGGREGATE", "CONVERSION", "DATABASE", "DOMAIN", "FUNCTION",
"GROUP", "INDEX", "LANGUAGE", "OPERATOR", "ROLE", "SCHEMA", "SEQUENCE", "TABLE", "GROUP", "INDEX", "LANGUAGE", "OPERATOR", "ROLE", "SCHEMA", "SEQUENCE", "TABLE",
"TABLESPACE", "TRIGGER", "TYPE", "USER", NULL}; "TABLESPACE", "TRIGGER", "TYPE", "USER", "VIEW", NULL};
COMPLETE_WITH_LIST(list_ALTER); COMPLETE_WITH_LIST(list_ALTER);
} }
...@@ -714,7 +714,7 @@ psql_completion(char *text, int start, int end) ...@@ -714,7 +714,7 @@ psql_completion(char *text, int start, int end)
{ {
static const char *const list_ALTERSEQUENCE[] = static const char *const list_ALTERSEQUENCE[] =
{"INCREMENT", "MINVALUE", "MAXVALUE", "RESTART", "NO", "CACHE", "CYCLE", {"INCREMENT", "MINVALUE", "MAXVALUE", "RESTART", "NO", "CACHE", "CYCLE",
"SET SCHEMA", NULL}; "SET SCHEMA", "RENAME TO", NULL};
COMPLETE_WITH_LIST(list_ALTERSEQUENCE); COMPLETE_WITH_LIST(list_ALTERSEQUENCE);
} }
...@@ -728,6 +728,14 @@ psql_completion(char *text, int start, int end) ...@@ -728,6 +728,14 @@ psql_completion(char *text, int start, int end)
COMPLETE_WITH_LIST(list_ALTERSEQUENCE2); 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", NULL};
COMPLETE_WITH_LIST(list_ALTERVIEW);
}
/* ALTER TRIGGER <name>, add ON */ /* ALTER TRIGGER <name>, add ON */
else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 && else if (pg_strcasecmp(prev3_wd, "ALTER") == 0 &&
pg_strcasecmp(prev2_wd, "TRIGGER") == 0) pg_strcasecmp(prev2_wd, "TRIGGER") == 0)
......
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group * Portions Copyright (c) 1996-2007, PostgreSQL Global Development Group
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* $PostgreSQL: pgsql/src/include/commands/tablecmds.h,v 1.33 2007/05/11 20:17:10 tgl Exp $ * $PostgreSQL: pgsql/src/include/commands/tablecmds.h,v 1.34 2007/07/03 01:30:37 neilc Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -43,7 +43,8 @@ extern void renameatt(Oid myrelid, ...@@ -43,7 +43,8 @@ extern void renameatt(Oid myrelid,
bool recursing); bool recursing);
extern void renamerel(Oid myrelid, extern void renamerel(Oid myrelid,
const char *newrelname); const char *newrelname,
ObjectType reltype);
extern void find_composite_type_dependencies(Oid typeOid, extern void find_composite_type_dependencies(Oid typeOid,
const char *origTblName, const char *origTblName,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment