pg.ddx.io  pgsql-docs@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: David Fetter <david@fetter.org>
To: PostgreSQL Patches <pgsql-patches@postgresql.org>
Cc: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Neil Conway <neilc@samurai.com>
Cc: Euler Taveira de Oliveira <euler@timbira.com>
Cc: Susanne Ebrecht <miracee@miracee.de>
Subject: Re: [DOCS] rename of a view
Date: Sun, 1 Jul 2007 12:55:28 -0700
Message-ID: <20070701195528.GX7636@fetter.org> (raw)
In-Reply-To: <15362.1183182531@sss.pgh.pa.us>
References: <46839C05.7050307@miracee.de>
	<3450.1183040211@sss.pgh.pa.us>
	<20070629183219.GO7636@fetter.org>
	<20070630001653.GQ7636@fetter.org>
	<4685D8C8.2070808@timbira.com>
	<12776.1183177571@sss.pgh.pa.us>
	<1183181585.20942.1.camel@goldbach>
	<15084.1183181782@sss.pgh.pa.us>
	<1183182221.20942.8.camel@goldbach>
	<15362.1183182531@sss.pgh.pa.us>

On Sat, Jun 30, 2007 at 01:48:51AM -0400, Tom Lane wrote:
> Neil Conway <neilc@samurai.com> 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 <david@fetter.org> 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

Attachments:

alter_view_sequence_v2.diff (text/plain, 10.7K) download 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,
alter_view.sgml (text/sgml, 2.3K) download <!-- $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>

view thread (22+ messages)  latest in thread

Message-ID: <20070701195528.GX7636@fetter.org>
Permalink:  ../20070701195528.GX7636@fetter.org/
Also on:    postgresql.org/message-id/20070701195528.GX7636@fetter.org

 ·  · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-docs@postgresql.org
  Cc: david@fetter.org, pgsql-patches@postgresql.org, tgl@sss.pgh.pa.us, neilc@samurai.com, euler@timbira.com, miracee@miracee.de
  Subject: Re: [DOCS] rename of a view
  In-Reply-To: <20070701195528.GX7636@fetter.org>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox