*** 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 | | {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 | | {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 | | {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 | | {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