at7-index-opfamily.patch

text/plain

Filename: at7-index-opfamily.patch
Type: text/plain
Part: 0
Message: ALTER TYPE 7: avoid index rebuilds/FK validations

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: context
File+
src/backend/commands/indexcmds.c 76 0
src/backend/commands/tablecmds.c 333 0
src/include/commands/defrem.h 6 0
src/test/regress/expected/alter_table.out 99 0
src/test/regress/sql/alter_table.sql 3 0
*** a/src/backend/commands/indexcmds.c
--- b/src/backend/commands/indexcmds.c
***************
*** 73,78 **** static bool relationHasPrimaryKey(Relation rel);
--- 73,154 ----
  
  
  /*
+  * GetIndexCompatibilityFeatures
+  *		Select operator classes and exclusion operators for a prospective index.
+  *
+  * Mostly a support function for MakeIndexCompatible().  Omits some of the
+  * checks of DefineIndex, as the index definition always has an internal
+  * genesis.  Errors arising from the attribute list still apply.
+  *
+  * 'heapRelation': the relation the index would apply to.
+  * 'accessMethodName': name of the AM to use.
+  * 'attributeList': a list of IndexElem specifying columns and expressions
+  *		to index on.
+  * 'exclusionOpNames': list of names of exclusion-constraint operators,
+  *		or NIL if not an exclusion constraint.
+  *
+  * Returns a palloc'd array of operator class OIDs and another palloc'd array of
+  * exclusion operator OIDs.  Each has one element per index column.
+  */
+ void
+ GetIndexCompatibilityAspects(RangeVar *heapRelation,
+ 							 char *accessMethodName,
+ 							 List *attributeList,
+ 							 List *exclusionOpNames,
+ 							 Oid **opClasses,
+ 							 Oid **exclusionOps)
+ {
+ 	Oid		   *classObjectId;
+ 	Oid			accessMethodId;
+ 	HeapTuple	tuple;
+ 	Form_pg_am	accessMethodForm;
+ 	bool		amcanorder;
+ 	RegProcedure amoptions;
+ 	int16	   *coloptions;
+ 	IndexInfo  *indexInfo;
+ 	int			numberOfAttributes;
+ 
+ 	numberOfAttributes = list_length(attributeList);
+ 	Assert(numberOfAttributes > 0);
+ 	Assert(numberOfAttributes <= INDEX_MAX_KEYS);
+ 
+ 	/* look up the access method */
+ 	tuple = SearchSysCache1(AMNAME, PointerGetDatum(accessMethodName));
+ 	if (!HeapTupleIsValid(tuple))
+ 		ereport(ERROR,
+ 				(errcode(ERRCODE_UNDEFINED_OBJECT),
+ 				 errmsg("access method \"%s\" does not exist",
+ 						accessMethodName)));
+ 	accessMethodId = HeapTupleGetOid(tuple);
+ 	accessMethodForm = (Form_pg_am) GETSTRUCT(tuple);
+ 	amcanorder = accessMethodForm->amcanorder;
+ 	amoptions = accessMethodForm->amoptions;
+ 	ReleaseSysCache(tuple);
+ 
+ 	indexInfo = makeNode(IndexInfo);
+ 	indexInfo->ii_Expressions = NIL;
+ 	indexInfo->ii_ExpressionsState = NIL;
+ 	indexInfo->ii_PredicateState = NIL;
+ 	indexInfo->ii_ExclusionOps = NULL;
+ 	indexInfo->ii_ExclusionProcs = NULL;
+ 	indexInfo->ii_ExclusionStrats = NULL;
+ 	classObjectId = (Oid *) palloc(numberOfAttributes * sizeof(Oid));
+ 	coloptions = (int16 *) palloc(numberOfAttributes * sizeof(int16));
+ 
+ 	/*
+ 	 * We can pretend isconstraint = false unconditionally.  It only serves to
+ 	 * decide the text of an error message that should never happen for us.
+ 	 */
+ 	ComputeIndexAttrs(indexInfo, classObjectId, coloptions, attributeList,
+ 					  exclusionOpNames, RangeVarGetRelid(heapRelation, false),
+ 					  accessMethodName, accessMethodId, false, amcanorder);
+ 	pfree(coloptions);
+ 
+ 	*opClasses = classObjectId;
+ 	*exclusionOps = indexInfo->ii_ExclusionOps;
+ }
+ 
+ /*
   * DefineIndex
   *		Creates a new index.
   *
*** a/src/backend/commands/tablecmds.c
--- b/src/backend/commands/tablecmds.c
***************
*** 118,123 **** static List *on_commits = NIL;
--- 118,124 ----
   * a pass determined by subcommand type.
   */
  
+ #define AT_PASS_INVALID			-1		/* placeholder, pending selection */
  #define AT_PASS_DROP			0		/* DROP (all flavors) */
  #define AT_PASS_ALTER_TYPE		1		/* ALTER COLUMN TYPE */
  #define AT_PASS_OLD_INDEX		2		/* re-add existing indexes */
***************
*** 338,344 **** static void ATPrepAlterColumnType(List **wqueue,
  static void ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
  					  const char *colName, TypeName *typeName, LOCKMODE lockmode);
  static void ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode);
! static void ATPostAlterTypeParse(char *cmd, List **wqueue, LOCKMODE lockmode);
  static void change_owner_recurse_to_sequences(Oid relationOid,
  								  Oid newOwnerId, LOCKMODE lockmode);
  static void ATExecClusterOn(Relation rel, const char *indexName, LOCKMODE lockmode);
--- 339,347 ----
  static void ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
  					  const char *colName, TypeName *typeName, LOCKMODE lockmode);
  static void ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode);
! static void ATPostAlterTypeCleanupOne(Oid classId, Oid oldId, char *cmd,
! 						  List **wqueue, LOCKMODE lockmode, bool newBits);
! static bool MakeIndexCompatible(Oid oldId, IndexStmt *stmt);
  static void change_owner_recurse_to_sequences(Oid relationOid,
  								  Oid newOwnerId, LOCKMODE lockmode);
  static void ATExecClusterOn(Relation rel, const char *indexName, LOCKMODE lockmode);
***************
*** 6809,6960 **** ATExecAlterColumnType(AlteredTableInfo *tab, Relation rel,
  }
  
  /*
!  * Cleanup after we've finished all the ALTER TYPE operations for a
!  * particular relation.  We have to drop and recreate all the indexes
!  * and constraints that depend on the altered columns.
   */
  static void
  ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode)
  {
! 	ObjectAddress obj;
! 	ListCell   *l;
  
  	/*
! 	 * Re-parse the index and constraint definitions, and attach them to the
! 	 * appropriate work queue entries.	We do this before dropping because in
! 	 * the case of a FOREIGN KEY constraint, we might not yet have exclusive
! 	 * lock on the table the constraint is attached to, and we need to get
! 	 * that before dropping.  It's safe because the parser won't actually look
! 	 * at the catalogs to detect the existing entry.
  	 */
! 	foreach(l, tab->changedIndexDefs)
! 		ATPostAlterTypeParse((char *) lfirst(l), wqueue, lockmode);
! 	foreach(l, tab->changedConstraintDefs)
! 		ATPostAlterTypeParse((char *) lfirst(l), wqueue, lockmode);
  
  	/*
! 	 * Now we can drop the existing constraints and indexes --- constraints
! 	 * first, since some of them might depend on the indexes.  In fact, we
! 	 * have to delete FOREIGN KEY constraints before UNIQUE constraints, but
! 	 * we already ordered the constraint list to ensure that would happen. It
! 	 * should be okay to use DROP_RESTRICT here, since nothing else should be
! 	 * depending on these objects.
  	 */
! 	foreach(l, tab->changedConstraintOids)
  	{
! 		obj.classId = ConstraintRelationId;
! 		obj.objectId = lfirst_oid(l);
! 		obj.objectSubId = 0;
! 		performDeletion(&obj, DROP_RESTRICT);
  	}
  
! 	foreach(l, tab->changedIndexOids)
  	{
! 		obj.classId = RelationRelationId;
! 		obj.objectId = lfirst_oid(l);
  		obj.objectSubId = 0;
  		performDeletion(&obj, DROP_RESTRICT);
  	}
- 
- 	/*
- 	 * The objects will get recreated during subsequent passes over the work
- 	 * queue.
- 	 */
  }
  
! static void
! ATPostAlterTypeParse(char *cmd, List **wqueue, LOCKMODE lockmode)
  {
! 	List	   *raw_parsetree_list;
! 	List	   *querytree_list;
! 	ListCell   *list_item;
  
  	/*
! 	 * We expect that we will get only ALTER TABLE and CREATE INDEX
! 	 * statements. Hence, there is no need to pass them through
! 	 * parse_analyze() or the rewriter, but instead we need to pass them
! 	 * through parse_utilcmd.c to make them ready for execution.
  	 */
! 	raw_parsetree_list = raw_parser(cmd);
! 	querytree_list = NIL;
! 	foreach(list_item, raw_parsetree_list)
! 	{
! 		Node	   *stmt = (Node *) lfirst(list_item);
! 
! 		if (IsA(stmt, IndexStmt))
! 			querytree_list = lappend(querytree_list,
! 									 transformIndexStmt((IndexStmt *) stmt,
! 														cmd));
! 		else if (IsA(stmt, AlterTableStmt))
! 			querytree_list = list_concat(querytree_list,
! 							 transformAlterTableStmt((AlterTableStmt *) stmt,
! 													 cmd));
! 		else
! 			querytree_list = lappend(querytree_list, stmt);
  	}
  
! 	/*
! 	 * Attach each generated command to the proper place in the work queue.
! 	 * Note this could result in creation of entirely new work-queue entries.
! 	 */
! 	foreach(list_item, querytree_list)
  	{
! 		Node	   *stm = (Node *) lfirst(list_item);
! 		Relation	rel;
! 		AlteredTableInfo *tab;
  
! 		switch (nodeTag(stm))
! 		{
! 			case T_IndexStmt:
! 				{
! 					IndexStmt  *stmt = (IndexStmt *) stm;
! 					AlterTableCmd *newcmd;
! 
! 					rel = relation_openrv(stmt->relation, lockmode);
! 					tab = ATGetQueueEntry(wqueue, rel);
! 					newcmd = makeNode(AlterTableCmd);
! 					newcmd->subtype = AT_ReAddIndex;
! 					newcmd->def = (Node *) stmt;
! 					tab->subcmds[AT_PASS_OLD_INDEX] =
! 						lappend(tab->subcmds[AT_PASS_OLD_INDEX], newcmd);
! 					relation_close(rel, NoLock);
! 					break;
! 				}
! 			case T_AlterTableStmt:
! 				{
! 					AlterTableStmt *stmt = (AlterTableStmt *) stm;
! 					ListCell   *lcmd;
  
! 					rel = relation_openrv(stmt->relation, lockmode);
! 					tab = ATGetQueueEntry(wqueue, rel);
! 					foreach(lcmd, stmt->cmds)
! 					{
! 						AlterTableCmd *cmd = (AlterTableCmd *) lfirst(lcmd);
  
! 						switch (cmd->subtype)
! 						{
! 							case AT_AddIndex:
! 								cmd->subtype = AT_ReAddIndex;
! 								tab->subcmds[AT_PASS_OLD_INDEX] =
! 									lappend(tab->subcmds[AT_PASS_OLD_INDEX], cmd);
! 								break;
! 							case AT_AddConstraint:
! 								tab->subcmds[AT_PASS_OLD_CONSTR] =
! 									lappend(tab->subcmds[AT_PASS_OLD_CONSTR], cmd);
! 								break;
! 							default:
! 								elog(ERROR, "unexpected statement type: %d",
! 									 (int) cmd->subtype);
! 						}
! 					}
! 					relation_close(rel, NoLock);
! 					break;
! 				}
! 			default:
! 				elog(ERROR, "unexpected statement type: %d",
! 					 (int) nodeTag(stm));
! 		}
  	}
  }
  
  
--- 6812,7176 ----
  }
  
  /*
!  * The pseudo-pass follows AT_PASS_ALTER_TYPE for a particular relation.  Here,
!  * we parse the statements to recreate indexes and constraints that depend on
!  * the altered columns, then drop the current objects.  This parsing cannot come
!  * earlier, because the tuple descriptor must be in final form.  We must drop
!  * FOREIGN KEY constraints before indexes and index-based constraints; we have
!  * already ordered changedConstraintOids accordingly.  We will recreate the
!  * objects during AT_PASS_OLD_INDEX and AT_PASS_OLD_CONSTR.
   */
  static void
  ATPostAlterTypeCleanup(List **wqueue, AlteredTableInfo *tab, LOCKMODE lockmode)
  {
! 	ListCell   *def;
! 	ListCell   *oid;
! 
! 	forboth(oid, tab->changedConstraintOids, def, tab->changedConstraintDefs)
! 	{
! 		ATPostAlterTypeCleanupOne(ConstraintRelationId,
! 								  lfirst_oid(oid), (char *) lfirst(def),
! 								  wqueue, lockmode, tab->new_bits);
! 	}
! 	forboth(oid, tab->changedIndexOids, def, tab->changedIndexDefs)
! 	{
! 		ATPostAlterTypeCleanupOne(RelationRelationId,
! 								  lfirst_oid(oid), (char *) lfirst(def),
! 								  wqueue, lockmode, tab->new_bits);
! 	}
! }
! 
! static void
! ATPostAlterTypeCleanupOne(Oid classId, Oid oldId, char *cmd,
! 						  List **wqueue, LOCKMODE lockmode, bool newBits)
! {
! 	List	   *raw_parsetree_list;
! 	Node	   *stm;
! 	RangeVar   *rv;
! 	Oid			index_oid;
! 	IndexStmt  *index_stmt = NULL;
! 	AlterTableCmd *atcmd;
! 	int			pass = AT_PASS_INVALID;
  
  	/*
! 	 * We expect either an ALTER TABLE or a CREATE INDEX statement.  Hence,
! 	 * there is no need to pass it through parse_analyze() or the rewriter, but
! 	 * instead we need to pass it through parse_utilcmd.c to make it ready.
! 	 * Objects with the same still exist, but parse analysis won't look.
  	 */
! 	raw_parsetree_list = raw_parser(cmd);
! 	Assert(list_length(raw_parsetree_list) == 1);
! 	stm = (Node *) linitial(raw_parsetree_list);
! 	if (IsA(stm, IndexStmt))
! 		stm = (Node *) transformIndexStmt((IndexStmt *) stm, cmd);
! 	else if (IsA(stm, AlterTableStmt))
! 	{
! 		List	   *querytree_list;
! 
! 		querytree_list = transformAlterTableStmt((AlterTableStmt *) stm, cmd);
! 		Assert(list_length(querytree_list) == 1);
! 		stm = (Node *) linitial(querytree_list);
! 	}
! 	/* else, retain the raw parse tree: error likely coming soon */
  
  	/*
! 	 * Construct an AlterTableCmd for the statement and choose a pass in which
! 	 * to execute it.  Identify its RangeVar.  For plain indexes and constraints
! 	 * based on indexes, identify the IndexStmt parse node and OID of the
! 	 * soon-obsolete index.
  	 */
! 	switch (nodeTag(stm))
  	{
! 		case T_IndexStmt:
! 			{
! 				index_oid = oldId;
! 				index_stmt = (IndexStmt *) stm;
! 				rv = index_stmt->relation;
! 				atcmd = makeNode(AlterTableCmd);
! 				atcmd->subtype = AT_ReAddIndex;
! 				atcmd->def = stm;
! 				pass = AT_PASS_OLD_INDEX;
! 				break;
! 			}
! 		case T_AlterTableStmt:
! 			{
! 				AlterTableStmt *stmt = (AlterTableStmt *) stm;
! 
! 				rv = stmt->relation;
! 				Assert(list_length(stmt->cmds) == 1);
! 				atcmd = (AlterTableCmd *) linitial(stmt->cmds);
! 
! 				switch (atcmd->subtype)
! 				{
! 					case AT_AddIndex:
! 						Assert(IsA(atcmd->def, IndexStmt));
! 						index_oid = get_constraint_index(oldId);
! 						index_stmt = (IndexStmt *) atcmd->def;
! 
! 						atcmd->subtype = AT_ReAddIndex;
! 						pass = AT_PASS_OLD_INDEX;
! 						break;
! 					case AT_AddConstraint:
! 
! 						/*
! 						 * Skip foreign key revalidation when the stored bits
! 						 * aren't changing.  ATAddCheckConstraint does not look
! 						 * at skip_validation.  This works well in practice, but
! 						 * it suffers from the same formal risks as index reuse.
! 						 * See the comment at MakeIndexCompatible().
! 						 */
! 						if (!newBits)
! 							((Constraint *) atcmd->def)->skip_validation = true;
! 
! 						pass = AT_PASS_OLD_CONSTR;
! 						break;
! 					default:
! 						elog(ERROR, "unexpected statement type: %d",
! 							 (int) atcmd->subtype);
! 				}
! 
! 				break;
! 			}
! 		default:
! 			elog(ERROR, "unexpected statement type: %d",
! 				 (int) nodeTag(stm));
  	}
  
! 	/*
! 	 * When an index or index-based constraint is provably compatible with its
! 	 * current edition, we can update the definition instead of dropping and
! 	 * recreating the object.  For constraints with no storage, we still drop
! 	 * and recreate but add a note above to skip revalidation.
! 	 */
! 	if (index_stmt == NULL || newBits ||
! 		!MakeIndexCompatible(index_oid, index_stmt))
  	{
! 		Relation	rel;
! 		AlteredTableInfo *tab;
! 		ObjectAddress obj;
! 
! 		/* Find or create a work-queue entry and add the analyzed command. */
! 		rel = relation_openrv(rv, lockmode);
! 		tab = ATGetQueueEntry(wqueue, rel);
! 		relation_close(rel, NoLock);
! 		Assert(pass != AT_PASS_INVALID);
! 		tab->subcmds[pass] = lappend(tab->subcmds[pass], atcmd);
! 
! 		/* Drop the obsolete edition of the object. */
! 		obj.classId = classId;
! 		obj.objectId = oldId;
  		obj.objectSubId = 0;
  		performDeletion(&obj, DROP_RESTRICT);
  	}
  }
  
! /*
!  * Typical indexes will remain valid across most column type changes not
!  * entailing table rewrites.  We assume continued validity when each column of
!  * an index would have the same operator family before and after the change.  No
!  * formal behavioral contract justifies this, but it fits well in practice.  To
!  * illustrate the formal hazard, consider type "int_regular" and "int_negative",
!  * both covered by a common operator family.  To user, they both behave like the
!  * SQL standard integer type, but the latter internally stores the negation of
!  * its value.  Now suppose an explicit binary-coercion cast between them.  After
!  * a no-work change between these types on a B-tree-indexed column, the operator
!  * family will remain the same, but the sort order inverts.  The operator family
!  * was blameless under its contract.  This arose because we effectively assumed
!  * that a cast had some connection to the B-tree operator family's concept of
!  * equality.  That connection is firm in practice, yet informal.
!  *
!  * We do not document a contract for GIN or GiST operator families.  Only the
!  * GIN operator family "array_ops" has more than one constituent operator class,
!  * and only typmod-only changes to arrays can avoid a rewrite.  Preserving a GIN
!  * index across such a change is safe.  We therefore support GiST and GIN here
!  * using the same rules as for B-tree and hash indexes, but that is mostly
!  * academic.  Any forthcoming contract for GiST or GIN operator families should,
!  * all other things being equal, bolster the validity of this assumption.
!  *
!  * Exclusion constraints raise the question: can we trust that the operator has
!  * the same semantics with the new type?  The operator will fall in the index's
!  * operator family.  For B-tree or hash, the operator will be "=" or "<>",
!  * yielding an affirmative answer from contractual requirements.  For GiST and
!  * GIN, we assume that a similar requirement would fall out of any contract for
!  * their operator families, should one arise.  We therefore support exclusion
!  * constraints without any special treatment, but this is again mostly academic.
!  *
!  * This implementation assumes a general similarity with the old and new
!  * indexes, specifically that they have the same number of columns, and that if
!  * one has an expression column or predicate, both do.  Since the new index
!  * statement comes from pg_get_indexdef on the old index, this had better hold.
!  */
! static bool
! MakeIndexCompatible(Oid oldId, IndexStmt *stmt)
  {
! 	HeapTuple	tup;
! 	int2		index_natts;
! 	bool		isnull;
! 	oidvector  *old_indclass;
! 	Oid		   *new_indclass;
! 	Oid		   *new_conexclop;
! 	int			i;
! 	Relation	pg_index;
! 	Relation	pg_attribute;
! 	Relation	parentrel;
! 	Datum		repl_val[Natts_pg_index];
! 	bool		repl_null[Natts_pg_index];
! 	bool		repl_repl[Natts_pg_index] = {};
! 	Datum		d;
! 	int2vector *indkey;
! 	TupleDesc	tableDesc;
! 
! 	/* Get the soon-obsolete pg_index tuple. */
! 	tup = SearchSysCacheCopy1(INDEXRELID, ObjectIdGetDatum(oldId));
! 	if (!HeapTupleIsValid(tup))
! 		elog(ERROR, "cache lookup failed for index %u", oldId);
! 
! 	/* We don't handle expressions or predicates. */
! 	if (!(heap_attisnull(tup, Anum_pg_index_indpred) &&
! 		  heap_attisnull(tup, Anum_pg_index_indexprs)))
! 		return false;
  
  	/*
! 	 * If the old and new operator class of any index column differ in operator
! 	 * family, the old index may be incompatible.
  	 */
! 	index_natts = ((Form_pg_index) GETSTRUCT(tup))->indnatts;
! 
! 	d = SysCacheGetAttr(INDEXRELID, tup, Anum_pg_index_indclass, &isnull);
! 	Assert(!isnull);
! 	old_indclass = (oidvector *) DatumGetPointer(d);
! 
! 	GetIndexCompatibilityAspects(stmt->relation,
! 								 stmt->accessMethod,
! 								 stmt->indexParams,
! 								 stmt->excludeOpNames,
! 								 &new_indclass,
! 								 &new_conexclop);
! 
! 	for (i = 0; i < index_natts; i++)
! 	{
! 		Oid			old_opc = old_indclass->values[i];
! 		Oid			new_opc = new_indclass[i];
! 
! 		if (old_opc != new_opc
! 			&& get_opclass_family(old_opc) != get_opclass_family(new_opc))
! 			return false;
  	}
  
! 
! 	/* The old index is compatible.  Update catalogs. */
! 
! 	/* Update pg_index.indclass. */
! 	pg_index = heap_open(IndexRelationId, RowExclusiveLock);
! 
! 	repl_val[Anum_pg_index_indclass - 1]
! 		= PointerGetDatum(buildoidvector(new_indclass, index_natts));
! 	repl_null[Anum_pg_index_indclass - 1] = false;
! 	repl_repl[Anum_pg_index_indclass - 1] = true;
! 	tup = heap_modify_tuple(tup, RelationGetDescr(pg_index),
! 							repl_val, repl_null, repl_repl);
! 
! 	simple_heap_update(pg_index, &tup->t_self, tup);
! 	CatalogUpdateIndexes(pg_index, tup);
! 	heap_close(pg_index, RowExclusiveLock);
! 
! 	/* Update pg_attribute. */
! 	d = SysCacheGetAttr(INDEXRELID, tup, Anum_pg_index_indkey, &isnull);
! 	Assert(!isnull);
! 	indkey = (int2vector *) DatumGetPointer(d);
! 
! 	pg_attribute = heap_open(AttributeRelationId, RowExclusiveLock);
! 	parentrel = heap_open(((Form_pg_index) GETSTRUCT(tup))->indrelid, NoLock);
! 	tableDesc = RelationGetDescr(parentrel);
! 	for (i = 0; i < index_natts; i++)
  	{
! 		HeapTuple	atup;
! 		Form_pg_attribute indexatt;
! 		Form_pg_attribute tableatt;
! 		AttrNumber	table_attnum = indkey->values[i];
  
! 		/*
! 		 * pg_attribute tuples for expression columns depend only on the
! 		 * expression result type.  If the result type changed, we would have
! 		 * rejected the index as incompatible.  Therefore, nothing to do.
! 		 */
! 		if (table_attnum == 0)
! 			continue;
  
! 		/* System column definitions never change. */
! 		if (table_attnum < 0)
! 			continue;
  
! 		atup = SearchSysCacheCopy2(ATTNUM, oldId, i + 1);
! 		if (!HeapTupleIsValid(atup))	/* should not happen */
! 			elog(ERROR, "cache lookup failed for attribute %d of relation %u",
! 				 i + 1, oldId);
! 		indexatt = (Form_pg_attribute) GETSTRUCT(atup);
! 
! 		tableatt = tableDesc->attrs[AttrNumberGetAttrOffset(table_attnum)];
! 		Assert(table_attnum <= RelationGetNumberOfAttributes(parentrel));
! 
! 		/* Copy the table's pg_attribute row. */
! 		memcpy(indexatt, tableatt, ATTRIBUTE_FIXED_PART_SIZE);
! 
! 		/*
! 		 * Fix the stuff that should not be the same as the underlying
! 		 * attr.  Mirrors ConstructTupleDescriptor().
! 		 */
! 		indexatt->attrelid = oldId;
! 		indexatt->attnum = i + 1;
! 
! 		indexatt->attstattarget = -1;
! 		indexatt->attcacheoff = -1;
! 		indexatt->attnotnull = false;
! 		indexatt->atthasdef = false;
! 		indexatt->attislocal = true;
! 		indexatt->attinhcount = 0;
! 
! 		simple_heap_update(pg_attribute, &atup->t_self, atup);
! 		CatalogUpdateIndexes(pg_attribute, atup);
! 	}
! 	heap_close(parentrel, NoLock);
! 	heap_close(pg_attribute, RowExclusiveLock);
! 
! 	/* Update pg_constraint.conexclop. */
! 	if (new_conexclop != NULL)
! 	{
! 		Datum	   *opdatums;
! 		Relation	pg_constraint;
! 		Oid			conid;
! 		HeapTuple	ctup;
! 		ArrayType  *conexclop;
! 
! 		opdatums = (Datum *) palloc(index_natts * sizeof(*opdatums));
! 		for (i = 0; i < index_natts; i++)
! 			opdatums[i] = ObjectIdGetDatum(new_conexclop[i]);
! 		conexclop = construct_array(opdatums, index_natts, OIDOID, sizeof(Oid),
! 									true, 'i');
! 
! 		pg_constraint = heap_open(ConstraintRelationId, RowExclusiveLock);
! 
! 		conid = get_index_constraint(oldId);
! 		Assert(OidIsValid(conid));
! 		ctup = SearchSysCacheCopy1(CONSTROID, conid);
! 		if (!HeapTupleIsValid(ctup))	/* should not happen */
! 			elog(ERROR, "cache lookup failed for constraint %u", conid);
! 
! 		repl_repl[Anum_pg_index_indclass - 1] = false;	/* clear earlier use */
! 		repl_val[Anum_pg_constraint_conexclop - 1] = PointerGetDatum(conexclop);
! 		repl_null[Anum_pg_constraint_conexclop - 1] = false;
! 		repl_repl[Anum_pg_constraint_conexclop - 1] = true;
! 		ctup = heap_modify_tuple(ctup, RelationGetDescr(pg_constraint),
! 								 repl_val, repl_null, repl_repl);
! 
! 		simple_heap_update(pg_constraint, &ctup->t_self, ctup);
! 		CatalogUpdateIndexes(pg_constraint, ctup);
! 
! 		heap_close(pg_constraint, RowExclusiveLock);
  	}
+ 
+ 	CommandCounterIncrement();	/* XXX needed? */
+ 	return true;
  }
  
  
*** a/src/include/commands/defrem.h
--- b/src/include/commands/defrem.h
***************
*** 49,54 **** extern char *ChooseIndexName(const char *tabname, Oid namespaceId,
--- 49,60 ----
  				List *colnames, List *exclusionOpNames,
  				bool primary, bool isconstraint);
  extern List *ChooseIndexColumnNames(List *indexElems);
+ extern void GetIndexCompatibilityAspects(RangeVar *heapRelation,
+ 							 char *accessMethodName,
+ 							 List *attributeList,
+ 							 List *exclusionOpNames,
+ 							 Oid **opClasses,
+ 							 Oid **exclusionOps);
  extern Oid	GetDefaultOpClass(Oid type_id, Oid am_id);
  
  /* commands/functioncmds.c */
*** a/src/test/regress/expected/alter_table.out
--- b/src/test/regress/expected/alter_table.out
***************
*** 1519,1524 **** CREATE TABLE t (
--- 1519,1525 ----
  	document	xml					NOT NULL,
  	strarr		varchar(2)[]		NOT NULL,
  	square		box					NOT NULL,
+ 	EXCLUDE (stamptz WITH =),
  	CHECK (touchy_f(constraint0) < 10)
  );
  NOTICE:  CREATE TABLE / UNIQUE will create implicit index "t_constraint4_key" for table "t"
***************
*** 1541,1546 **** NOTICE:  CREATE TABLE / UNIQUE will create implicit index "t_bits_key" for table
--- 1542,1549 ----
  DEBUG:  Rebuilding index "t_bits_key"
  NOTICE:  CREATE TABLE / UNIQUE will create implicit index "t_network_key" for table "t"
  DEBUG:  Rebuilding index "t_network_key"
+ NOTICE:  CREATE TABLE / EXCLUDE will create implicit index "t_stamptz_excl" for table "t"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  CREATE INDEX ON t (string);
  DEBUG:  Rebuilding index "t_string_idx"
  CREATE INDEX ON t USING hash (string);
***************
*** 1615,1621 **** FROM pg_class WHERE oid = 't'::regclass
  ORDER BY 1;
        relname      | relnamespace | relowner | relam | reltablespace | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasexclusion | relhasrules | relhastriggers | relacl | reloptions 
  -------------------+--------------+----------+-------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-----------------+-------------+----------------+--------+------------
!  t                 |         2200 |       10 |     0 |             0 | t           | f           | p              | r       |       18 |         1 | f          | f          | f               | f           | t              |        | 
   t_bits_key        |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_constraint4_key |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_daytime_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
--- 1618,1624 ----
  ORDER BY 1;
        relname      | relnamespace | relowner | relam | reltablespace | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasexclusion | relhasrules | relhastriggers | relacl | reloptions 
  -------------------+--------------+----------+-------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-----------------+-------------+----------------+--------+------------
!  t                 |         2200 |       10 |     0 |             0 | t           | f           | p              | r       |       18 |         1 | f          | f          | t               | f           | t              |        | 
   t_bits_key        |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_constraint4_key |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_daytime_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
***************
*** 1626,1638 **** ORDER BY 1;
   t_rational_key    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_square_idx      |         2200 |       10 |   783 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_stamp_key       |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_stamptz_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_strarr_idx      |         2200 |       10 |  2742 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_string_idx      |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_string_idx1     |         2200 |       10 |   405 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_timegap_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_touchy_f_idx    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
! (17 rows)
  
  SELECT	relname, indnatts, indisunique, indisprimary, indimmediate,
  		indisclustered, indisvalid, indcheckxmin, indisready, indkey, indclass,
--- 1629,1642 ----
   t_rational_key    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_square_idx      |         2200 |       10 |   783 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_stamp_key       |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
+  t_stamptz_excl    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | t               | f           | f              |        | 
   t_stamptz_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_strarr_idx      |         2200 |       10 |  2742 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_string_idx      |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_string_idx1     |         2200 |       10 |   405 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_timegap_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_touchy_f_idx    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
! (18 rows)
  
  SELECT	relname, indnatts, indisunique, indisprimary, indimmediate,
  		indisclustered, indisvalid, indcheckxmin, indisready, indkey, indclass,
***************
*** 1651,1663 **** WHERE indrelid = 't'::regclass ORDER BY 1;
   t_rational_key    |        1 | t           | f            | t            | f              | t          | f            | t          | 7      | 10037    | 0
   t_square_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 18     | 10074    | 0
   t_stamp_key       |        1 | t           | f            | t            | f              | t          | f            | t          | 12     | 10054    | 0
   t_stamptz_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 11     | 10047    | 0
   t_strarr_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 17     | 10103    | 0
   t_string_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10043    | 0
   t_string_idx1     |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10044    | 0
   t_timegap_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 13     | 10031    | 0
   t_touchy_f_idx    |        1 | t           | f            | t            | f              | t          | f            | t          | 0      | 1978     | 0
! (16 rows)
  
  SELECT	relname, attname, atttypid, attstattarget, attlen, attnum, attndims,
  		attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull,
--- 1655,1668 ----
   t_rational_key    |        1 | t           | f            | t            | f              | t          | f            | t          | 7      | 10037    | 0
   t_square_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 18     | 10074    | 0
   t_stamp_key       |        1 | t           | f            | t            | f              | t          | f            | t          | 12     | 10054    | 0
+  t_stamptz_excl    |        1 | f           | f            | t            | f              | t          | f            | t          | 11     | 10047    | 0
   t_stamptz_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 11     | 10047    | 0
   t_strarr_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 17     | 10103    | 0
   t_string_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10043    | 0
   t_string_idx1     |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10044    | 0
   t_timegap_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 13     | 10031    | 0
   t_touchy_f_idx    |        1 | t           | f            | t            | f              | t          | f            | t          | 0      | 1978     | 0
! (17 rows)
  
  SELECT	relname, attname, atttypid, attstattarget, attlen, attnum, attndims,
  		attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull,
***************
*** 1702,1714 **** ORDER BY 1, 2;
   t_rational_key    | rational    |     1700 |            -1 |     -1 |      1 |        0 |          -1 |        -1 | f        | m          | i        | f          | f         | f            | t          |           0 |        | 
   t_square_idx      | square      |      603 |            -1 |     32 |      1 |        0 |          -1 |        -1 | f        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_stamp_key       | stamp       |     1114 |            -1 |      8 |      1 |        0 |          -1 |        -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_stamptz_key     | stamptz     |     1184 |            -1 |      8 |      1 |        0 |          -1 |        -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_strarr_idx      | strarr      |     1043 |            -1 |     -1 |      1 |        1 |          -1 |        -1 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx      | string      |     1043 |            -1 |     -1 |      1 |        0 |          -1 |         6 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx1     | string      |       23 |            -1 |      4 |      1 |        0 |          -1 |        -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
   t_timegap_key     | timegap     |     1186 |            -1 |     16 |      1 |        0 |          -1 |        -1 | f        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_touchy_f_idx    | touchy_f    |       23 |            -1 |      4 |      1 |        0 |          -1 |        -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
! (40 rows)
  
  SELECT	conname, connamespace, contype, condeferrable, condeferred, confupdtype,
  		confdeltype, confmatchtype, conislocal, coninhcount, conkey, confkey,
--- 1707,1720 ----
   t_rational_key    | rational    |     1700 |            -1 |     -1 |      1 |        0 |          -1 |        -1 | f        | m          | i        | f          | f         | f            | t          |           0 |        | 
   t_square_idx      | square      |      603 |            -1 |     32 |      1 |        0 |          -1 |        -1 | f        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_stamp_key       | stamp       |     1114 |            -1 |      8 |      1 |        0 |          -1 |        -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
+  t_stamptz_excl    | stamptz     |     1184 |            -1 |      8 |      1 |        0 |          -1 |        -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_stamptz_key     | stamptz     |     1184 |            -1 |      8 |      1 |        0 |          -1 |        -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_strarr_idx      | strarr      |     1043 |            -1 |     -1 |      1 |        1 |          -1 |        -1 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx      | string      |     1043 |            -1 |     -1 |      1 |        0 |          -1 |         6 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx1     | string      |       23 |            -1 |      4 |      1 |        0 |          -1 |        -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
   t_timegap_key     | timegap     |     1186 |            -1 |     16 |      1 |        0 |          -1 |        -1 | f        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_touchy_f_idx    | touchy_f    |       23 |            -1 |      4 |      1 |        0 |          -1 |        -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
! (41 rows)
  
  SELECT	conname, connamespace, contype, condeferrable, condeferred, confupdtype,
  		confdeltype, confmatchtype, conislocal, coninhcount, conkey, confkey,
***************
*** 1727,1735 **** ORDER BY 1;
   t_network_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {15}   |         |           |           |           |           | 
   t_rational_key      |         2200 | u       | f             | f           |             |             |               | t          |           0 | {7}    |         |           |           |           |           | 
   t_stamp_key         |         2200 | u       | f             | f           |             |             |               | t          |           0 | {12}   |         |           |           |           |           | 
   t_stamptz_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {11}   |         |           |           |           |           | 
   t_timegap_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {13}   |         |           |           |           |           | 
! (12 rows)
  
  -- RI trigger names include the table OID.  We don't have a great sort order
  -- available, but tgname probably serves acceptably in practice.
--- 1733,1742 ----
   t_network_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {15}   |         |           |           |           |           | 
   t_rational_key      |         2200 | u       | f             | f           |             |             |               | t          |           0 | {7}    |         |           |           |           |           | 
   t_stamp_key         |         2200 | u       | f             | f           |             |             |               | t          |           0 | {12}   |         |           |           |           |           | 
+  t_stamptz_excl      |         2200 | x       | f             | f           |             |             |               | t          |           0 | {11}   |         |           |           |           | {1320}    | 
   t_stamptz_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {11}   |         |           |           |           |           | 
   t_timegap_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {13}   |         |           |           |           |           | 
! (13 rows)
  
  -- RI trigger names include the table OID.  We don't have a great sort order
  -- available, but tgname probably serves acceptably in practice.
***************
*** 1775,1780 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1782,1788 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1796,1801 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1804,1810 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1805,1813 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Validating foreign key constraint "t_constraint3_fkey"
  ALTER TABLE t ALTER constraint3 TYPE numeric(7,2); -- verify; FK noop
  DEBUG:  Verifying table "t"
- DEBUG:  Validating foreign key constraint "t_constraint3_fkey"
  ALTER TABLE t ALTER constraint3 TYPE numeric(9,2); -- noop; FK noop
- DEBUG:  Validating foreign key constraint "t_constraint3_fkey"
  -- Change a column with an incoming foreign key constraint.
  ALTER TABLE t ALTER constraint4 TYPE numeric(8,1); -- rewrite; FK error
  DEBUG:  Rewriting table "t"
--- 1814,1820 ----
***************
*** 1820,1825 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1827,1833 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1841,1846 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1849,1855 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1850,1868 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Validating foreign key constraint "child_keycol_fkey"
  ALTER TABLE t ALTER constraint4 TYPE numeric(7,2); -- verify; FK noop
- DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Verifying table "t"
- DEBUG:  Validating foreign key constraint "child_keycol_fkey"
  ALTER TABLE t ALTER constraint4 TYPE numeric(9,2); -- noop; FK noop
- DEBUG:  Rebuilding index "t_constraint4_key"
- DEBUG:  Validating foreign key constraint "child_keycol_fkey"
  -- Type-specific tests.
  ALTER TABLE t ALTER integral TYPE abstime USING integral::abstime;	-- noop
  DEBUG:  Rebuilding index "t_integral_key"
  ALTER TABLE t ALTER integral TYPE oid USING integral::int4;			-- noop
  DEBUG:  Rebuilding index "t_integral_key"
  ALTER TABLE t ALTER integral TYPE regtype;							-- noop
- DEBUG:  Rebuilding index "t_integral_key"
  ALTER TABLE t ALTER integral TYPE int8;								-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_rational_key"
--- 1859,1872 ----
***************
*** 1873,1878 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1877,1883 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1891,1896 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1896,1902 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1908,1913 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1914,1920 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1926,1931 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1933,1939 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 1936,1947 **** DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  ALTER TABLE t ALTER rational TYPE numeric(13,4);					-- noop
- DEBUG:  Rebuilding index "t_rational_key"
  ALTER TABLE t ALTER rational TYPE numeric(11,4);					-- verify
- DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER rational TYPE numeric;							-- noop
- DEBUG:  Rebuilding index "t_rational_key"
  ALTER TABLE t ALTER rational TYPE numeric(5,4);						-- verify-e
  DEBUG:  Rewriting table "t"
  ERROR:  numeric field overflow
--- 1944,1952 ----
***************
*** 1951,1979 **** DEBUG:  Rewriting table "t"
  ERROR:  numeric field overflow
  DETAIL:  A field with precision 4, scale 3 must round to an absolute value less than 10^1.
  ALTER TABLE t ALTER string TYPE varchar(4);							-- noop
- DEBUG:  Rebuilding index "t_string_idx1"
- DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE lendom;								-- noop
- DEBUG:  Rebuilding index "t_string_idx"
- DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE shortdom;							-- rewrite-e
  DEBUG:  Rewriting table "t"
  ERROR:  value too long for type character varying(1)
  ALTER TABLE t ALTER string TYPE checkdom;							-- verify
- DEBUG:  Rebuilding index "t_string_idx1"
- DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER string TYPE faildom;							-- verify-e
- DEBUG:  Rebuilding index "t_string_idx"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Verifying table "t"
  ERROR:  value for domain faildom violates check constraint "faildom_check"
  ALTER TABLE t ALTER string TYPE loosedom;							-- noop
- DEBUG:  Rebuilding index "t_string_idx"
- DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE text;								-- noop
- DEBUG:  Rebuilding index "t_string_idx1"
- DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE varchar(20);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
--- 1956,1972 ----
***************
*** 1983,1988 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1976,1982 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 1990,1997 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE varchar(1);							-- rewrite-e
  DEBUG:  Rewriting table "t"
  ERROR:  value too long for type character varying(1)
--- 1984,1991 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx1"
+ DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE varchar(1);							-- rewrite-e
  DEBUG:  Rewriting table "t"
  ERROR:  value too long for type character varying(1)
***************
*** 2004,2009 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 1998,2004 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2011,2018 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE text USING 'foo'::varchar;			-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
--- 2006,2013 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE text USING 'foo'::varchar;			-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
***************
*** 2022,2027 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2017,2023 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2029,2036 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE char(3);							-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
--- 2025,2032 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx1"
+ DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE char(3);							-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
***************
*** 2040,2045 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2036,2042 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2047,2054 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE char(2);							-- rewrite-e
  DEBUG:  Rewriting table "t"
  ERROR:  value too long for type character(2)
--- 2044,2051 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE char(2);							-- rewrite-e
  DEBUG:  Rewriting table "t"
  ERROR:  value too long for type character(2)
***************
*** 2061,2066 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2058,2064 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2068,2075 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER string TYPE char(4);							-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
--- 2066,2073 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx1"
+ DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER string TYPE char(4);							-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytimetz_key"
***************
*** 2079,2084 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2077,2083 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2086,2093 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  ALTER TABLE t ALTER daytimetz TYPE timetz(3);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytime_key"
--- 2085,2092 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  ALTER TABLE t ALTER daytimetz TYPE timetz(3);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytime_key"
***************
*** 2096,2101 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2095,2101 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2103,2110 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytimetz TYPE timetz(1);						-- rewrite
  DEBUG:  Rewriting table "t"
--- 2103,2110 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytimetz TYPE timetz(1);						-- rewrite
  DEBUG:  Rewriting table "t"
***************
*** 2114,2119 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2114,2120 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2121,2131 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytimetz TYPE timetz(2);						-- noop
- DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytimetz TYPE time;							-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytime_key"
--- 2122,2131 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytimetz TYPE timetz(2);						-- noop
  ALTER TABLE t ALTER daytimetz TYPE time;							-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_daytime_key"
***************
*** 2134,2139 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2134,2140 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2141,2148 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytime TYPE time(3);							-- rewrite-v
  DEBUG:  Rewriting table "t"
--- 2142,2149 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  ALTER TABLE t ALTER daytime TYPE time(3);							-- rewrite-v
  DEBUG:  Rewriting table "t"
***************
*** 2151,2156 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2152,2158 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2158,2165 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER daytime TYPE time(1);							-- rewrite
--- 2160,2167 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER daytime TYPE time(1);							-- rewrite
***************
*** 2169,2174 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2171,2177 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2176,2187 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER daytime TYPE time(2);							-- noop
- DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER daytime TYPE timetz;							-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_stamptz_key"
--- 2179,2189 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER daytime TYPE time(2);							-- noop
  ALTER TABLE t ALTER daytime TYPE timetz;							-- rewrite
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_stamptz_key"
***************
*** 2189,2194 **** DEBUG:  Rebuilding index "t_stamp_key"
--- 2191,2197 ----
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Rebuilding index "t_network_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_strarr_idx"
  DEBUG:  Rebuilding index "t_square_idx"
  DEBUG:  Rebuilding index "t_touchy_f_idx"
***************
*** 2196,2203 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER stamptz TYPE timestamptz(3);					-- rewrite-v
--- 2199,2206 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  ALTER TABLE t ALTER stamptz TYPE timestamptz(3);					-- rewrite-v
***************
*** 2213,2222 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  ALTER TABLE t ALTER stamptz TYPE timestamptz(1);					-- rewrite
  DEBUG:  Rewriting table "t"
--- 2216,2226 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  ALTER TABLE t ALTER stamptz TYPE timestamptz(1);					-- rewrite
  DEBUG:  Rewriting table "t"
***************
*** 2231,2245 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  ALTER TABLE t ALTER stamptz TYPE timestamptz(2);					-- noop
- DEBUG:  Rebuilding index "t_stamptz_key"
  ALTER TABLE t ALTER stamptz TYPE timestamp;							-- noop
- DEBUG:  Rebuilding index "t_stamptz_key"
  SET timezone = 'Asia/Jakarta';
  ALTER TABLE t ALTER stamptz TYPE timestamptz;						-- rewrite
  DEBUG:  Rewriting table "t"
--- 2235,2248 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  ALTER TABLE t ALTER stamptz TYPE timestamptz(2);					-- noop
  ALTER TABLE t ALTER stamptz TYPE timestamp;							-- noop
  SET timezone = 'Asia/Jakarta';
  ALTER TABLE t ALTER stamptz TYPE timestamptz;						-- rewrite
  DEBUG:  Rewriting table "t"
***************
*** 2254,2265 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  SET timezone = 'UTC';
  ALTER TABLE t ALTER stamp TYPE timestamp(3);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2257,2270 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  SET timezone = 'UTC';
+ ALTER TABLE t ALTER stamptz TYPE timestamp;							-- noop
  ALTER TABLE t ALTER stamp TYPE timestamp(3);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2272,2281 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  ALTER TABLE t ALTER stamp TYPE timestamp(1);						-- rewrite
--- 2277,2287 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  ALTER TABLE t ALTER stamp TYPE timestamp(1);						-- rewrite
***************
*** 2290,2305 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  ALTER TABLE t ALTER stamp TYPE timestamp(2);						-- noop
- DEBUG:  Rebuilding index "t_stamp_key"
  ALTER TABLE t ALTER stamp TYPE timestamptz;							-- noop
- DEBUG:  Rebuilding index "t_stamp_key"
  SET timezone = 'Asia/Jakarta';
  ALTER TABLE t ALTER stamp TYPE timestamp;							-- rewrite
  DEBUG:  Rewriting table "t"
--- 2296,2310 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  ALTER TABLE t ALTER stamp TYPE timestamp(2);						-- noop
  ALTER TABLE t ALTER stamp TYPE timestamptz;							-- noop
  SET timezone = 'Asia/Jakarta';
  ALTER TABLE t ALTER stamp TYPE timestamp;							-- rewrite
  DEBUG:  Rewriting table "t"
***************
*** 2313,2325 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  SET timezone = 'UTC';
  ALTER TABLE t ALTER timegap TYPE interval(3);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_bits_key"
--- 2318,2332 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  SET timezone = 'UTC';
+ ALTER TABLE t ALTER stamp TYPE timestamptz;							-- noop
  ALTER TABLE t ALTER timegap TYPE interval(3);						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_bits_key"
***************
*** 2331,2340 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2338,2348 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2349,2368 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
  ALTER TABLE t ALTER timegap TYPE interval(2);						-- noop
- DEBUG:  Rebuilding index "t_timegap_key"
  ALTER TABLE t ALTER bits TYPE bit(6);								-- verify
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER bits TYPE bit(7);								-- verify-e
- DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Verifying table "t"
  ERROR:  bit string length 6 does not match type bit(7)
  ALTER TABLE t ALTER bits TYPE bit(7) USING bits::bit(7);			-- rewrite
--- 2357,2375 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
  ALTER TABLE t ALTER timegap TYPE interval(2);						-- noop
  ALTER TABLE t ALTER bits TYPE bit(6);								-- verify
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER bits TYPE bit(7);								-- verify-e
  DEBUG:  Verifying table "t"
  ERROR:  bit string length 6 does not match type bit(7)
  ALTER TABLE t ALTER bits TYPE bit(7) USING bits::bit(7);			-- rewrite
***************
*** 2375,2384 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2382,2392 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2388,2397 **** ALTER TABLE t ALTER bits TYPE varbit(8);							-- verify
  DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER bits TYPE varbit(7);							-- verify
- DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER bits TYPE varbit(5);							-- verify-e
- DEBUG:  Rebuilding index "t_bits_key"
  DEBUG:  Verifying table "t"
  ERROR:  bit string too long for type bit varying(5)
  ALTER TABLE t ALTER bits TYPE varbit(5) USING bits::varbit(5);		-- rewrite
--- 2396,2403 ----
***************
*** 2404,2421 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  ALTER TABLE t ALTER bits TYPE varbit(8);							-- noop
- DEBUG:  Rebuilding index "t_bits_key"
  ALTER TABLE t ALTER network TYPE inet;								-- noop
- DEBUG:  Rebuilding index "t_network_key"
  ALTER TABLE t ALTER network TYPE cidr;								-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_strarr_idx"
--- 2410,2426 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
  DEBUG:  Rebuilding index "t_bits_key"
  ALTER TABLE t ALTER bits TYPE varbit(8);							-- noop
  ALTER TABLE t ALTER network TYPE inet;								-- noop
  ALTER TABLE t ALTER network TYPE cidr;								-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_strarr_idx"
***************
*** 2425,2434 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2430,2440 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2446,2455 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2452,2462 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2466,2475 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2473,2483 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2478,2484 **** DEBUG:  Rebuilding index "t_network_key"
  ALTER TABLE t ALTER document TYPE xml USING document::xml;			-- verify
  DEBUG:  Verifying table "t"
  ALTER TABLE t ALTER strarr TYPE varchar(4)[];						-- noop
- DEBUG:  Rebuilding index "t_strarr_idx"
  ALTER TABLE t ALTER strarr TYPE varchar(3)[];						-- rewrite-v
  DEBUG:  Rewriting table "t"
  DEBUG:  Rebuilding index "t_square_idx"
--- 2486,2491 ----
***************
*** 2487,2496 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2494,2504 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2508,2517 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2516,2526 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2525,2534 **** DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2534,2544 ----
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2547,2556 **** DEBUG:  Rebuilding index "t_touchy_f_idx"
  DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_rational_key"
- DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_string_idx"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
--- 2557,2567 ----
  DEBUG:  Rebuilding index "t_expr_idx"
  DEBUG:  Rebuilding index "t_constraint4_key"
  DEBUG:  Rebuilding index "t_rational_key"
  DEBUG:  Rebuilding index "t_string_idx"
+ DEBUG:  Rebuilding index "t_string_idx1"
  DEBUG:  Rebuilding index "t_daytimetz_key"
  DEBUG:  Rebuilding index "t_daytime_key"
+ DEBUG:  Rebuilding index "t_stamptz_excl"
  DEBUG:  Rebuilding index "t_stamptz_key"
  DEBUG:  Rebuilding index "t_stamp_key"
  DEBUG:  Rebuilding index "t_timegap_key"
***************
*** 2563,2572 **** DEBUG:  Rebuilding index "t_integral_key"
  DEBUG:  Rebuilding index "u1"
  -- Data and catalog end state.  We omit the columns that bear unstable OIDs.
  SELECT * FROM t ORDER BY 1;
!  constraint0 | constraint1 | constraint2 | constraint3 | constraint4 | integral | rational | string | daytimetz  |    daytime    |            stamptz             |           stamp            |  timegap   | bits  |   network   |       document       | strarr  |          square           
! -------------+-------------+-------------+-------------+-------------+----------+----------+--------+------------+---------------+--------------------------------+----------------------------+------------+-------+-------------+----------------------+---------+---------------------------
!            1 |           2 |           3 |        1.05 |        1.06 |        4 |  10.1200 | fo     | 08:44:00.2 | 08:44:00.3+00 | Sat Jan 01 01:44:00.4 2000 UTC | Sat Jan 01 15:44:00.5 2000 | @ 1.6 secs | 01110 | 10.0.0.0/16 | <foo/>               | {ab,cd} | ((0,0),(0,1),(1,1),(1,0))
!            2 |           3 |           4 |        1.15 |        1.16 |        5 |  11.1200 | fo     | 09:44:00.2 | 09:44:00.3+00 | Sat Jan 01 02:44:00.4 2000 UTC | Sat Jan 01 16:44:00.5 2000 | @ 2.6 secs | 00110 | 10.1.0.0/16 | <bar/>               | {ef,gh} | ((0,0),(0,2),(2,2),(2,0))
  (2 rows)
  
  SELECT	relname, relnamespace, relowner, relam, reltablespace, relhasindex,
--- 2574,2583 ----
  DEBUG:  Rebuilding index "u1"
  -- Data and catalog end state.  We omit the columns that bear unstable OIDs.
  SELECT * FROM t ORDER BY 1;
!  constraint0 | constraint1 | constraint2 | constraint3 | constraint4 | integral | rational | string | daytimetz  |    daytime    |          stamptz           |             stamp              |  timegap   | bits  |   network   |       document       | strarr  |          square           
! -------------+-------------+-------------+-------------+-------------+----------+----------+--------+------------+---------------+----------------------------+--------------------------------+------------+-------+-------------+----------------------+---------+---------------------------
!            1 |           2 |           3 |        1.05 |        1.06 |        4 |  10.1200 | fo     | 08:44:00.2 | 08:44:00.3+00 | Sat Jan 01 01:44:00.4 2000 | Sat Jan 01 15:44:00.5 2000 UTC | @ 1.6 secs | 01110 | 10.0.0.0/16 | <foo/>               | {ab,cd} | ((0,0),(0,1),(1,1),(1,0))
!            2 |           3 |           4 |        1.15 |        1.16 |        5 |  11.1200 | fo     | 09:44:00.2 | 09:44:00.3+00 | Sat Jan 01 02:44:00.4 2000 | Sat Jan 01 16:44:00.5 2000 UTC | @ 2.6 secs | 00110 | 10.1.0.0/16 | <bar/>               | {ef,gh} | ((0,0),(0,2),(2,2),(2,0))
  (2 rows)
  
  SELECT	relname, relnamespace, relowner, relam, reltablespace, relhasindex,
***************
*** 2578,2584 **** FROM pg_class WHERE oid = 't'::regclass
  ORDER BY 1;
        relname      | relnamespace | relowner | relam | reltablespace | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasexclusion | relhasrules | relhastriggers | relacl | reloptions 
  -------------------+--------------+----------+-------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-----------------+-------------+----------------+--------+------------
!  t                 |         2200 |       10 |     0 |             0 | t           | f           | p              | r       |       18 |         1 | f          | f          | f               | f           | t              |        | 
   t_bits_key        |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_constraint4_key |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_daytime_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
--- 2589,2595 ----
  ORDER BY 1;
        relname      | relnamespace | relowner | relam | reltablespace | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasexclusion | relhasrules | relhastriggers | relacl | reloptions 
  -------------------+--------------+----------+-------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-----------------+-------------+----------------+--------+------------
!  t                 |         2200 |       10 |     0 |             0 | t           | f           | p              | r       |       18 |         1 | f          | f          | t               | f           | t              |        | 
   t_bits_key        |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_constraint4_key |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_daytime_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
***************
*** 2589,2594 **** ORDER BY 1;
--- 2600,2606 ----
   t_rational_key    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_square_idx      |         2200 |       10 |   783 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_stamp_key       |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
+  t_stamptz_excl    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | t               | f           | f              |        | 
   t_stamptz_key     |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_strarr_idx      |         2200 |       10 |  2742 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   t_string_idx      |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
***************
*** 2597,2603 **** ORDER BY 1;
   t_touchy_f_idx    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   u0                |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   u1                |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
! (19 rows)
  
  SELECT	relname, indnatts, indisunique, indisprimary, indimmediate,
  		indisclustered, indisvalid, indcheckxmin, indisready, indkey, indclass,
--- 2609,2615 ----
   t_touchy_f_idx    |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   u0                |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
   u1                |         2200 |       10 |   403 |             0 | f           | f           | p              | i       |        1 |         0 | f          | f          | f               | f           | f              |        | 
! (20 rows)
  
  SELECT	relname, indnatts, indisunique, indisprimary, indimmediate,
  		indisclustered, indisvalid, indcheckxmin, indisready, indkey, indclass,
***************
*** 2615,2622 **** WHERE indrelid = 't'::regclass ORDER BY 1;
   t_network_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 15     | 10025    | 0
   t_rational_key    |        1 | t           | f            | t            | f              | t          | f            | t          | 7      | 10037    | 0
   t_square_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 18     | 10076    | 0
!  t_stamp_key       |        1 | t           | f            | t            | f              | t          | f            | t          | 12     | 10054    | 0
!  t_stamptz_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 11     | 10047    | 0
   t_strarr_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 17     | 10079    | 0
   t_string_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10012    | 0
   t_string_idx1     |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10013    | 0
--- 2627,2635 ----
   t_network_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 15     | 10025    | 0
   t_rational_key    |        1 | t           | f            | t            | f              | t          | f            | t          | 7      | 10037    | 0
   t_square_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 18     | 10076    | 0
!  t_stamp_key       |        1 | t           | f            | t            | f              | t          | f            | t          | 12     | 10047    | 0
!  t_stamptz_excl    |        1 | f           | f            | t            | f              | t          | f            | t          | 11     | 10054    | 0
!  t_stamptz_key     |        1 | t           | f            | t            | f              | t          | f            | t          | 11     | 10054    | 0
   t_strarr_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 17     | 10079    | 0
   t_string_idx      |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10012    | 0
   t_string_idx1     |        1 | f           | f            | t            | f              | t          | f            | t          | 8      | 10013    | 0
***************
*** 2624,2630 **** WHERE indrelid = 't'::regclass ORDER BY 1;
   t_touchy_f_idx    |        1 | t           | f            | t            | f              | t          | f            | t          | 0      | 1978     | 0
   u0                |        1 | t           | f            | t            | f              | t          | f            | t          | 6      | 1978     | 0
   u1                |        1 | t           | f            | t            | f              | t          | f            | t          | 6      | 1978     | 0
! (18 rows)
  
  SELECT	relname, attname, atttypid, attstattarget, attlen, attnum, attndims,
  		attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull,
--- 2637,2643 ----
   t_touchy_f_idx    |        1 | t           | f            | t            | f              | t          | f            | t          | 0      | 1978     | 0
   u0                |        1 | t           | f            | t            | f              | t          | f            | t          | 6      | 1978     | 0
   u1                |        1 | t           | f            | t            | f              | t          | f            | t          | 6      | 1978     | 0
! (19 rows)
  
  SELECT	relname, attname, atttypid, attstattarget, attlen, attnum, attndims,
  		attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull,
***************
*** 2651,2658 **** ORDER BY 1, 2;
   t                 | network     |      650 |            -1 |     -1 |     15 |        0 |          -1 |         -1 | f        | m          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | rational    |     1700 |            -1 |     -1 |      7 |        0 |          -1 |         -1 | f        | m          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | square      |      604 |            -1 |     -1 |     18 |        0 |          -1 |         -1 | f        | x          | d        | t          | f         | f            | t          |           0 |        | 
!  t                 | stamp       |     1114 |            -1 |      8 |     12 |        0 |          -1 |         -1 | t        | p          | d        | t          | f         | f            | t          |           0 |        | 
!  t                 | stamptz     |     1184 |            -1 |      8 |     11 |        0 |          -1 |         -1 | t        | p          | d        | t          | f         | f            | t          |           0 |        | 
   t                 | strarr      |     1009 |            -1 |     -1 |     17 |        1 |          -1 |         -1 | f        | x          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | string      |     1042 |            -1 |     -1 |      8 |        0 |          -1 |          8 | f        | x          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | tableoid    |       26 |             0 |      4 |     -7 |        0 |          -1 |         -1 | t        | p          | i        | t          | f         | f            | t          |           0 |        | 
--- 2664,2671 ----
   t                 | network     |      650 |            -1 |     -1 |     15 |        0 |          -1 |         -1 | f        | m          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | rational    |     1700 |            -1 |     -1 |      7 |        0 |          -1 |         -1 | f        | m          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | square      |      604 |            -1 |     -1 |     18 |        0 |          -1 |         -1 | f        | x          | d        | t          | f         | f            | t          |           0 |        | 
!  t                 | stamp       |     1184 |            -1 |      8 |     12 |        0 |          -1 |         -1 | t        | p          | d        | t          | f         | f            | t          |           0 |        | 
!  t                 | stamptz     |     1114 |            -1 |      8 |     11 |        0 |          -1 |         -1 | t        | p          | d        | t          | f         | f            | t          |           0 |        | 
   t                 | strarr      |     1009 |            -1 |     -1 |     17 |        1 |          -1 |         -1 | f        | x          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | string      |     1042 |            -1 |     -1 |      8 |        0 |          -1 |          8 | f        | x          | i        | t          | f         | f            | t          |           0 |        | 
   t                 | tableoid    |       26 |             0 |      4 |     -7 |        0 |          -1 |         -1 | t        | p          | i        | t          | f         | f            | t          |           0 |        | 
***************
*** 2668,2675 **** ORDER BY 1, 2;
   t_network_key     | network     |      650 |            -1 |     -1 |      1 |        0 |          -1 |         -1 | f        | m          | i        | f          | f         | f            | t          |           0 |        | 
   t_rational_key    | rational    |     1700 |            -1 |     -1 |      1 |        0 |          -1 |         -1 | f        | m          | i        | f          | f         | f            | t          |           0 |        | 
   t_square_idx      | square      |      603 |            -1 |     32 |      1 |        0 |          -1 |         -1 | f        | p          | d        | f          | f         | f            | t          |           0 |        | 
!  t_stamp_key       | stamp       |     1114 |            -1 |      8 |      1 |        0 |          -1 |         -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
!  t_stamptz_key     | stamptz     |     1184 |            -1 |      8 |      1 |        0 |          -1 |         -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_strarr_idx      | strarr      |       25 |            -1 |     -1 |      1 |        1 |          -1 |         -1 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx      | string      |     1042 |            -1 |     -1 |      1 |        0 |          -1 |          8 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx1     | string      |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
--- 2681,2689 ----
   t_network_key     | network     |      650 |            -1 |     -1 |      1 |        0 |          -1 |         -1 | f        | m          | i        | f          | f         | f            | t          |           0 |        | 
   t_rational_key    | rational    |     1700 |            -1 |     -1 |      1 |        0 |          -1 |         -1 | f        | m          | i        | f          | f         | f            | t          |           0 |        | 
   t_square_idx      | square      |      603 |            -1 |     32 |      1 |        0 |          -1 |         -1 | f        | p          | d        | f          | f         | f            | t          |           0 |        | 
!  t_stamp_key       | stamp       |     1184 |            -1 |      8 |      1 |        0 |          -1 |         -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
!  t_stamptz_excl    | stamptz     |     1114 |            -1 |      8 |      1 |        0 |          -1 |         -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
!  t_stamptz_key     | stamptz     |     1114 |            -1 |      8 |      1 |        0 |          -1 |         -1 | t        | p          | d        | f          | f         | f            | t          |           0 |        | 
   t_strarr_idx      | strarr      |       25 |            -1 |     -1 |      1 |        1 |          -1 |         -1 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx      | string      |     1042 |            -1 |     -1 |      1 |        0 |          -1 |          8 | f        | x          | i        | f          | f         | f            | t          |           0 |        | 
   t_string_idx1     | string      |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
***************
*** 2677,2683 **** ORDER BY 1, 2;
   t_touchy_f_idx    | touchy_f    |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
   u0                | integral    |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
   u1                | integral    |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
! (42 rows)
  
  SELECT	conname, connamespace, contype, condeferrable, condeferred, confupdtype,
  		confdeltype, confmatchtype, conislocal, coninhcount, conkey, confkey,
--- 2691,2697 ----
   t_touchy_f_idx    | touchy_f    |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
   u0                | integral    |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
   u1                | integral    |       23 |            -1 |      4 |      1 |        0 |          -1 |         -1 | t        | p          | i        | f          | f         | f            | t          |           0 |        | 
! (43 rows)
  
  SELECT	conname, connamespace, contype, condeferrable, condeferred, confupdtype,
  		confdeltype, confmatchtype, conislocal, coninhcount, conkey, confkey,
***************
*** 2696,2706 **** ORDER BY 1;
   t_network_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {15}   |         |           |           |           |           | 
   t_rational_key      |         2200 | u       | f             | f           |             |             |               | t          |           0 | {7}    |         |           |           |           |           | 
   t_stamp_key         |         2200 | u       | f             | f           |             |             |               | t          |           0 | {12}   |         |           |           |           |           | 
   t_stamptz_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {11}   |         |           |           |           |           | 
   t_timegap_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {13}   |         |           |           |           |           | 
   u0                  |         2200 | u       | f             | f           |             |             |               | t          |           0 | {6}    |         |           |           |           |           | 
   u1                  |         2200 | u       | f             | f           |             |             |               | t          |           0 | {6}    |         |           |           |           |           | 
! (14 rows)
  
  -- RI trigger names include the table OID.  We don't have a great sort order
  -- available, but tgname probably serves acceptably in practice.
--- 2710,2721 ----
   t_network_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {15}   |         |           |           |           |           | 
   t_rational_key      |         2200 | u       | f             | f           |             |             |               | t          |           0 | {7}    |         |           |           |           |           | 
   t_stamp_key         |         2200 | u       | f             | f           |             |             |               | t          |           0 | {12}   |         |           |           |           |           | 
+  t_stamptz_excl      |         2200 | x       | f             | f           |             |             |               | t          |           0 | {11}   |         |           |           |           | {2060}    | 
   t_stamptz_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {11}   |         |           |           |           |           | 
   t_timegap_key       |         2200 | u       | f             | f           |             |             |               | t          |           0 | {13}   |         |           |           |           |           | 
   u0                  |         2200 | u       | f             | f           |             |             |               | t          |           0 | {6}    |         |           |           |           |           | 
   u1                  |         2200 | u       | f             | f           |             |             |               | t          |           0 | {6}    |         |           |           |           |           | 
! (15 rows)
  
  -- RI trigger names include the table OID.  We don't have a great sort order
  -- available, but tgname probably serves acceptably in practice.
*** a/src/test/regress/sql/alter_table.sql
--- b/src/test/regress/sql/alter_table.sql
***************
*** 1141,1146 **** CREATE TABLE t (
--- 1141,1147 ----
  	strarr		varchar(2)[]		NOT NULL,
  	square		box					NOT NULL,
  
+ 	EXCLUDE (stamptz WITH =),
  	CHECK (touchy_f(constraint0) < 10)
  );
  CREATE INDEX ON t (string);
***************
*** 1307,1312 **** ALTER TABLE t ALTER stamptz TYPE timestamp;							-- noop
--- 1308,1314 ----
  SET timezone = 'Asia/Jakarta';
  ALTER TABLE t ALTER stamptz TYPE timestamptz;						-- rewrite
  SET timezone = 'UTC';
+ ALTER TABLE t ALTER stamptz TYPE timestamp;							-- noop
  
  ALTER TABLE t ALTER stamp TYPE timestamp(3);						-- rewrite-v
  ALTER TABLE t ALTER stamp TYPE timestamp(1);						-- rewrite
***************
*** 1315,1320 **** ALTER TABLE t ALTER stamp TYPE timestamptz;							-- noop
--- 1317,1323 ----
  SET timezone = 'Asia/Jakarta';
  ALTER TABLE t ALTER stamp TYPE timestamp;							-- rewrite
  SET timezone = 'UTC';
+ ALTER TABLE t ALTER stamp TYPE timestamptz;							-- noop
  
  ALTER TABLE t ALTER timegap TYPE interval(3);						-- rewrite-v
  ALTER TABLE t ALTER timegap TYPE interval(1);						-- rewrite