<!--
-$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
-->
<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>
<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>
</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>
<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>
<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>
</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>
</refsect1>
</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>
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
/* 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;
*
*
* 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 $
*
*-------------------------------------------------------------------------
*/
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)
{
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 ||
}
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)