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)