diff --git a/doc/src/sgml/ref/alter_index.sgml b/doc/src/sgml/ref/alter_index.sgml index 7ea1f2e97a5391c5665f25c570ed3d3b58cf3b76..c212fd09f93f59b214522f1ef9de2f573dc834d0 100644 --- a/doc/src/sgml/ref/alter_index.sgml +++ b/doc/src/sgml/ref/alter_index.sgml @@ -1,5 +1,5 @@ <!-- -$PostgreSQL: pgsql/doc/src/sgml/ref/alter_index.sgml,v 1.5 2005/03/14 00:19:36 neilc Exp $ +$PostgreSQL: pgsql/doc/src/sgml/ref/alter_index.sgml,v 1.6 2005/08/22 19:39:52 tgl Exp $ PostgreSQL documentation --> @@ -20,13 +20,8 @@ PostgreSQL documentation <refsynopsisdiv> <synopsis> -ALTER INDEX <replaceable class="PARAMETER">name</replaceable> <replaceable class="PARAMETER">action</replaceable> [, ... ] ALTER INDEX <replaceable class="PARAMETER">name</replaceable> RENAME TO <replaceable class="PARAMETER">new_name</replaceable> - -where <replaceable class="PARAMETER">action</replaceable> is one of: - - OWNER TO <replaceable class="PARAMETER">new_owner</replaceable> - SET TABLESPACE <replaceable class="PARAMETER">indexspace_name</replaceable> +ALTER INDEX <replaceable class="PARAMETER">name</replaceable> SET TABLESPACE <replaceable class="PARAMETER">tablespace_name</replaceable> </synopsis> </refsynopsisdiv> @@ -40,11 +35,11 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: <variablelist> <varlistentry> - <term><literal>OWNER</literal></term> + <term><literal>RENAME</literal></term> <listitem> <para> - This form changes the owner of the index to the - specified user. This can only be done by a superuser. + The <literal>RENAME</literal> form changes the name of the index. + There is no effect on the stored data. </para> </listitem> </varlistentry> @@ -61,24 +56,9 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: </listitem> </varlistentry> - <varlistentry> - <term><literal>RENAME</literal></term> - <listitem> - <para> - The <literal>RENAME</literal> form changes the name of the index. - There is no effect on the stored data. - </para> - </listitem> - </varlistentry> - </variablelist> </para> - <para> - All the actions except <literal>RENAME</literal> can be combined into - a list of multiple alterations to apply in parallel. - </para> - </refsect1> <refsect1> @@ -90,28 +70,17 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: <term><replaceable class="PARAMETER">name</replaceable></term> <listitem> <para> - The name (possibly schema-qualified) of an existing index to - alter. + The name (possibly schema-qualified) of an existing index to + alter. </para> </listitem> </varlistentry> - <varlistentry> <term><replaceable class="PARAMETER">new_name</replaceable></term> <listitem> <para> - New name for the index. - </para> - </listitem> - </varlistentry> - - - <varlistentry> - <term><replaceable class="PARAMETER">new_owner</replaceable></term> - <listitem> - <para> - The user name of the new owner of the index. + New name for the index. </para> </listitem> </varlistentry> @@ -120,7 +89,7 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: <term><replaceable class="PARAMETER">tablespace_name</replaceable></term> <listitem> <para> - The tablespace name to which the index will be moved. + The tablespace to which the index will be moved. </para> </listitem> </varlistentry> @@ -138,6 +107,13 @@ where <replaceable class="PARAMETER">action</replaceable> is one of: of <command>ALTER TABLE</> that apply to indexes. </para> + <para> + There was formerly an <command>ALTER INDEX OWNER</> variant, but + this is now ignored (with a warning). An index cannot have an owner + different from its table's owner. Changing the table's owner + automatically changes the index as well. + </para> + <para> Changing any part of a system catalog index is not permitted. </para> @@ -153,7 +129,7 @@ ALTER INDEX distributors RENAME TO suppliers; </para> <para> - To move a index to a different tablespace: + To move an index to a different tablespace: <programlisting> ALTER INDEX distributors SET TABLESPACE fasttablespace; </programlisting> diff --git a/src/backend/commands/tablecmds.c b/src/backend/commands/tablecmds.c index 95e3ef68bb050d0de1da97a1a948b5edc0513a3f..f2dd4a5a47d0ffe6bccacc50f63350c3542e398e 100644 --- a/src/backend/commands/tablecmds.c +++ b/src/backend/commands/tablecmds.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.167 2005/08/22 17:38:20 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/commands/tablecmds.c,v 1.168 2005/08/22 19:40:09 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -5279,6 +5279,25 @@ ATExecChangeOwner(Oid relationOid, Oid newOwnerId, bool recursing) /* ok to change owner */ break; case RELKIND_INDEX: + if (!recursing) + { + /* + * Because ALTER INDEX OWNER used to be allowed, and in fact + * is generated by old versions of pg_dump, we give a warning + * and do nothing rather than erroring out. Also, to avoid + * unnecessary chatter while restoring those old dumps, say + * nothing at all if the command would be a no-op anyway. + */ + if (tuple_class->relowner != newOwnerId) + ereport(WARNING, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cannot change owner of index \"%s\"", + NameStr(tuple_class->relname)), + errhint("Change the ownership of the index's table, instead."))); + /* quick hack to exit via the no-op path */ + newOwnerId = tuple_class->relowner; + } + break; case RELKIND_TOASTVALUE: if (recursing) break; diff --git a/src/bin/pg_dump/pg_backup_archiver.c b/src/bin/pg_dump/pg_backup_archiver.c index 9bfed97424fdc3571c5309dc1257ea821875478c..a8fb1d70f77801167dc4c22e4cbde7c52a7c26ef 100644 --- a/src/bin/pg_dump/pg_backup_archiver.c +++ b/src/bin/pg_dump/pg_backup_archiver.c @@ -15,7 +15,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.112 2005/08/12 01:35:59 tgl Exp $ + * $PostgreSQL: pgsql/src/bin/pg_dump/pg_backup_archiver.c,v 1.113 2005/08/22 19:40:37 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -2305,14 +2305,9 @@ _getObjectDescription(PQExpBuffer buf, TocEntry *te, ArchiveHandle *AH) strcmp(type, "SEQUENCE") == 0) type = "TABLE"; - /* We assume CONSTRAINTs are always pkey/unique indexes */ - if (strcmp(type, "CONSTRAINT") == 0) - type = "INDEX"; - /* objects named by a schema and name */ if (strcmp(type, "CONVERSION") == 0 || strcmp(type, "DOMAIN") == 0 || - strcmp(type, "INDEX") == 0 || strcmp(type, "TABLE") == 0 || strcmp(type, "TYPE") == 0) { @@ -2473,12 +2468,10 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat strlen(te->owner) > 0 && strlen(te->dropStmt) > 0) { if (strcmp(te->desc, "AGGREGATE") == 0 || - strcmp(te->desc, "CONSTRAINT") == 0 || strcmp(te->desc, "CONVERSION") == 0 || strcmp(te->desc, "DATABASE") == 0 || strcmp(te->desc, "DOMAIN") == 0 || strcmp(te->desc, "FUNCTION") == 0 || - strcmp(te->desc, "INDEX") == 0 || strcmp(te->desc, "OPERATOR") == 0 || strcmp(te->desc, "OPERATOR CLASS") == 0 || strcmp(te->desc, "SCHEMA") == 0 || @@ -2497,8 +2490,10 @@ _printTocEntry(ArchiveHandle *AH, TocEntry *te, RestoreOptions *ropt, bool isDat } else if (strcmp(te->desc, "CAST") == 0 || strcmp(te->desc, "CHECK CONSTRAINT") == 0 || + strcmp(te->desc, "CONSTRAINT") == 0 || strcmp(te->desc, "DEFAULT") == 0 || strcmp(te->desc, "FK CONSTRAINT") == 0 || + strcmp(te->desc, "INDEX") == 0 || strcmp(te->desc, "PROCEDURAL LANGUAGE") == 0 || strcmp(te->desc, "RULE") == 0 || strcmp(te->desc, "TRIGGER") == 0)