diff --git a/src/backend/commands/command.c b/src/backend/commands/command.c
index b166ed539cd61239b9a0450907c15f6d86fbb584..c32be8b02f397cd9f52009167f5659a7036ac4d8 100644
--- a/src/backend/commands/command.c
+++ b/src/backend/commands/command.c
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.160 2002/03/06 19:58:26 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.161 2002/03/14 22:44:50 momjian Exp $
  *
  * NOTES
  *	  The PerformAddAttribute() code, like most of the relation
@@ -1619,11 +1619,13 @@ AlterTableOwnerId(Oid relationOid, int32 newOwnerSysId)
 	CatalogCloseIndices(Num_pg_class_indices, idescs);
 
 	/*
-	 * If we are operating on a table, also change the ownership
-	 * of all of its indexes.
+	 * If we are operating on a table, also change the ownership of any
+	 * indexes that belong to the table, as well as the table's toast
+	 * table (if it has one)
 	 */
 	if (tuple_class->relkind == RELKIND_RELATION)
 	{
+		/* Search for indexes belonging to this table */
 		Relation target_rel;
 		List *index_oid_list, *i;
 
@@ -1639,6 +1641,12 @@ AlterTableOwnerId(Oid relationOid, int32 newOwnerSysId)
 		}
 
 		freeList(index_oid_list);
+
+		/* If it has a toast table, recurse to change its ownership */
+		if (tuple_class->reltoastrelid != InvalidOid)
+		{
+			AlterTableOwnerId(tuple_class->reltoastrelid, newOwnerSysId);
+		}
 	}
 
 	heap_freetuple(tuple);
@@ -1654,10 +1662,11 @@ CheckTupleType(Form_pg_class tuple_class)
 		case RELKIND_INDEX:
 		case RELKIND_VIEW:
 		case RELKIND_SEQUENCE:
+		case RELKIND_TOASTVALUE:
 			/* ok to change owner */
 			break;
 		default:
-			elog(ERROR, "ALTER TABLE: relation \"%s\" is not a table, index, view, or sequence",
+			elog(ERROR, "ALTER TABLE: relation \"%s\" is not a table, TOAST table, index, view, or sequence",
 				 NameStr(tuple_class->relname));
 	}
 }