ALTER TYPE 7: avoid index rebuilds/FK validations
When the earlier patches in this series allow ALTER TABLE ... ALTER COLUMN
... TYPE to skip the table rewrite, it still rebuilds indexes and rechecks
constraints depending on that column. With this patch, we'll skip an index
rebuild when the change does not cross operator families and the index has no
expression column or predicate. Also, we'll skip FOREIGN KEY validation
unconditionally (create-time foreign key compatibility checks still apply).
These policies have some formal hazards detailed in the code comments, but I
believe those hazards do not extend to any built-in types or credible
user-defined types. We may wish to remove the formal gap by extending the
contract of B-tree operator families: something along the lines that casts
between types in the family must preserve equality within the family.
The standing code handled index/constraint dependencies of changing columns by
extracting the SQL definition using pg_get_indexdef or pg_get_constraintdef,
dropping the object, and recreating it afresh. To implement this optimization
for indexes and index-backed constraints, we need to update the index definition
without perturbing its storage. I saw two major ways to do this and have
attached implementations of each, both having the same user-facing semantics.
I'd appreciate feedback on which is preferable. The first skips the drop and
updates pg_index.indclass, pg_attribute, and pg_constraint.conexclop. The
second keeps the drop and create, then resurrects the old relfilenode and
assigns it to the new object. The second strategy is significantly simpler and
smaller, but it seems less-like anything else we do. As a further variation on
the second approach, I considered drilling holes through the performDeletion()
and DefineIndex() stacks to avoid the drop-and-later-preserve dynamic, but that
ultimately appeared uglier.
ATPostAlterTypeCleanup has this comment:
/*
* 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.
*/
Is the second sentence true? I don't think so, so I deleted it for now. Here
is the sequence of lock requests against the table possessing the FOREIGN KEY
constraint when we alter the parent/upstream column:
transformAlterTableStmt - ShareRowExclusiveLock
ATPostAlterTypeParse - lockmode of original ALTER TABLE
RemoveTriggerById() for update trigger - ShareRowExclusiveLock
RemoveTriggerById() for insert trigger - ShareRowExclusiveLock
RemoveConstraintById() - AccessExclusiveLock
CreateTrigger() for insert trigger - ShareRowExclusiveLock
CreateTrigger() for update trigger - ShareRowExclusiveLock
RI_Initial_Check() - AccessShareLock (3x)
Thanks,
nm
Attachments:
at7-index-opfamily.patchtext/plain; charset=us-asciiDownload
*** 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
at7-alt-index-opfamily.patchtext/plain; charset=us-asciiDownload
*** a/src/backend/catalog/storage.c
--- b/src/backend/catalog/storage.c
***************
*** 221,229 **** RelationPreserveStorage(RelFileNode rnode)
next = pending->next;
if (RelFileNodeEquals(rnode, pending->relnode))
{
- /* we should only find delete-on-abort entries, else trouble */
- if (pending->atCommit)
- elog(ERROR, "cannot preserve a delete-on-commit relation");
/* unlink and delete list entry */
if (prev)
prev->next = next;
--- 221,226 ----
*** 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.
*
***************
*** 103,110 **** static bool relationHasPrimaryKey(Relation rel);
* it will be filled later.
* 'quiet': suppress the NOTICE chatter ordinarily provided for constraints.
* 'concurrent': avoid blocking writers to the table while building.
*/
! void
DefineIndex(RangeVar *heapRelation,
char *indexRelationName,
Oid indexRelationId,
--- 179,188 ----
* it will be filled later.
* 'quiet': suppress the NOTICE chatter ordinarily provided for constraints.
* 'concurrent': avoid blocking writers to the table while building.
+ *
+ * Returns the OID of the new index relation.
*/
! Oid
DefineIndex(RangeVar *heapRelation,
char *indexRelationName,
Oid indexRelationId,
***************
*** 486,492 **** DefineIndex(RangeVar *heapRelation,
concurrent);
if (!concurrent)
! return; /* We're done, in the standard case */
/*
* For a concurrent build, it's important to make the catalog entries
--- 564,570 ----
concurrent);
if (!concurrent)
! return indexRelationId; /* We're done, in the standard case */
/*
* For a concurrent build, it's important to make the catalog entries
***************
*** 768,773 **** DefineIndex(RangeVar *heapRelation,
--- 846,853 ----
* Last thing to do is release the session-level lock on the parent table.
*/
UnlockRelationIdForSession(&heaprelid, ShareUpdateExclusiveLock);
+
+ return indexRelationId;
}
*** 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 ATPostAlterTypeParse(Oid oldId, char *cmd,
! List **wqueue, LOCKMODE lockmode, bool newBits);
! static void CheckIndexCompatible(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);
***************
*** 5021,5057 **** ATExecAddIndex(AlteredTableInfo *tab, Relation rel,
bool check_rights;
bool skip_build;
bool quiet;
Assert(IsA(stmt, IndexStmt));
/* suppress schema rights check when rebuilding existing index */
check_rights = !is_rebuild;
! /* skip index build if phase 3 will have to rewrite table anyway */
! skip_build = tab->new_bits;
/* suppress notices when rebuilding existing index */
quiet = is_rebuild;
/* The IndexStmt has already been through transformIndexStmt */
! DefineIndex(stmt->relation, /* relation */
! stmt->idxname, /* index name */
! InvalidOid, /* no predefined OID */
! stmt->accessMethod, /* am name */
! stmt->tableSpace,
! stmt->indexParams, /* parameters */
! (Expr *) stmt->whereClause,
! stmt->options,
! stmt->excludeOpNames,
! stmt->unique,
! stmt->primary,
! stmt->isconstraint,
! stmt->deferrable,
! stmt->initdeferred,
! true, /* is_alter_table */
! check_rights,
! skip_build,
! quiet,
! false);
}
/*
--- 5024,5098 ----
bool check_rights;
bool skip_build;
bool quiet;
+ Oid new_index;
Assert(IsA(stmt, IndexStmt));
/* suppress schema rights check when rebuilding existing index */
check_rights = !is_rebuild;
! /* skip index build if phase 3 will do it or we're reusing an old one */
! skip_build = tab->new_bits || OidIsValid(stmt->oldNode);
/* suppress notices when rebuilding existing index */
quiet = is_rebuild;
/* The IndexStmt has already been through transformIndexStmt */
! new_index = DefineIndex(stmt->relation, /* relation */
! stmt->idxname, /* index name */
! InvalidOid, /* no predefined OID */
! stmt->accessMethod, /* am name */
! stmt->tableSpace,
! stmt->indexParams, /* parameters */
! (Expr *) stmt->whereClause,
! stmt->options,
! stmt->excludeOpNames,
! stmt->unique,
! stmt->primary,
! stmt->isconstraint,
! stmt->deferrable,
! stmt->initdeferred,
! true, /* is_alter_table */
! check_rights,
! skip_build,
! quiet,
! false);
!
! /*
! * If CheckIndexCompatible stashed a relfilenode for us, replace the fresh
! * one with that. This vaguely follows swap_relation_files, but we need
! * not consider the case of a system table. Indexes inherit relfrozenxid
! * and never have TOAST tables.
! */
! if (OidIsValid(stmt->oldNode))
! {
! Relation pg_class;
! Relation irel;
! HeapTuple tup;
!
! /* Drop the empty storage just created under DefineIndex. */
! irel = index_open(new_index, NoLock);
! RelationDropStorage(irel);
!
! /* Update pg_class.relfilenode. */
! pg_class = heap_open(RelationRelationId, RowExclusiveLock);
! tup = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(new_index));
! if (!HeapTupleIsValid(tup)) /* shouldn't happen */
! elog(ERROR, "cache lookup failed for relation %u", new_index);
!
! ((Form_pg_class) GETSTRUCT(tup))->relfilenode = stmt->oldNode;
! simple_heap_update(pg_class, &tup->t_self, tup);
! CatalogUpdateIndexes(pg_class, tup);
! heap_close(pg_class, RowExclusiveLock);
!
! CommandCounterIncrement();
!
! /*
! * The reassigned storage is probably scheduled for deletion, having
! * been attached to a just-DROPped index. Revive it.
! */
! RelationPreserveStorage(irel->rd_node);
! index_close(irel, NoLock);
! }
}
/*
***************
*** 6809,6869 **** 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;
--- 6850,6895 ----
}
/*
! * 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)
{
ObjectAddress obj;
! ListCell *def;
! ListCell *oid;
! forboth(oid, tab->changedConstraintOids, def, tab->changedConstraintDefs)
{
+ ATPostAlterTypeParse(lfirst_oid(oid), (char *) lfirst(def),
+ wqueue, lockmode, tab->new_bits);
+
obj.classId = ConstraintRelationId;
! obj.objectId = lfirst_oid(oid);
obj.objectSubId = 0;
performDeletion(&obj, DROP_RESTRICT);
}
! forboth(oid, tab->changedIndexOids, def, tab->changedIndexDefs)
{
+ ATPostAlterTypeParse(lfirst_oid(oid), (char *) lfirst(def),
+ wqueue, lockmode, tab->new_bits);
+
obj.classId = RelationRelationId;
! obj.objectId = lfirst_oid(oid);
obj.objectSubId = 0;
performDeletion(&obj, DROP_RESTRICT);
}
}
static void
! ATPostAlterTypeParse(Oid oldId, char *cmd,
! List **wqueue, LOCKMODE lockmode, bool newBits)
{
List *raw_parsetree_list;
List *querytree_list;
***************
*** 6910,6915 **** ATPostAlterTypeParse(char *cmd, List **wqueue, LOCKMODE lockmode)
--- 6936,6944 ----
IndexStmt *stmt = (IndexStmt *) stm;
AlterTableCmd *newcmd;
+ if (!newBits)
+ CheckIndexCompatible(oldId, stmt);
+
rel = relation_openrv(stmt->relation, lockmode);
tab = ATGetQueueEntry(wqueue, rel);
newcmd = makeNode(AlterTableCmd);
***************
*** 6934,6944 **** ATPostAlterTypeParse(char *cmd, List **wqueue, LOCKMODE lockmode)
--- 6963,6992 ----
switch (cmd->subtype)
{
case AT_AddIndex:
+ Assert(IsA(cmd->def, IndexStmt));
+ if (!newBits)
+ CheckIndexCompatible(get_constraint_index(oldId),
+ (IndexStmt *) cmd->def);
+
cmd->subtype = AT_ReAddIndex;
tab->subcmds[AT_PASS_OLD_INDEX] =
lappend(tab->subcmds[AT_PASS_OLD_INDEX], cmd);
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 CheckIndexCompatible().
+ */
+ if (!newBits)
+ ((Constraint *) cmd->def)->skip_validation
+ = true;
+
tab->subcmds[AT_PASS_OLD_CONSTR] =
lappend(tab->subcmds[AT_PASS_OLD_CONSTR], cmd);
break;
***************
*** 6957,6962 **** ATPostAlterTypeParse(char *cmd, List **wqueue, LOCKMODE lockmode)
--- 7005,7102 ----
}
}
+ /*
+ * 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 void
+ CheckIndexCompatible(Oid oldId, IndexStmt *stmt)
+ {
+ HeapTuple tup;
+ int2 index_natts;
+ bool isnull;
+ oidvector *old_indclass;
+ Oid *new_indclass;
+ Oid *new_conexclop;
+ int i;
+ Datum d;
+ Relation irel;
+
+ /* 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;
+
+ /*
+ * 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;
+ }
+
+ /* The old index is compatible. Keep its relfilenode for ATExecAddIndex. */
+ irel = index_open(oldId, NoLock);
+ stmt->oldNode = irel->rd_node.relNode;
+ index_close(irel, NoLock);
+ }
+
/*
* ALTER TABLE OWNER
*** a/src/backend/nodes/copyfuncs.c
--- b/src/backend/nodes/copyfuncs.c
***************
*** 2715,2720 **** _copyIndexStmt(IndexStmt *from)
--- 2715,2721 ----
COPY_SCALAR_FIELD(deferrable);
COPY_SCALAR_FIELD(initdeferred);
COPY_SCALAR_FIELD(concurrent);
+ COPY_SCALAR_FIELD(oldNode);
return newnode;
}
*** a/src/backend/nodes/equalfuncs.c
--- b/src/backend/nodes/equalfuncs.c
***************
*** 1219,1224 **** _equalIndexStmt(IndexStmt *a, IndexStmt *b)
--- 1219,1225 ----
COMPARE_SCALAR_FIELD(deferrable);
COMPARE_SCALAR_FIELD(initdeferred);
COMPARE_SCALAR_FIELD(concurrent);
+ COMPARE_SCALAR_FIELD(oldNode);
return true;
}
*** a/src/backend/nodes/outfuncs.c
--- b/src/backend/nodes/outfuncs.c
***************
*** 1887,1892 **** _outIndexStmt(StringInfo str, IndexStmt *node)
--- 1887,1893 ----
WRITE_BOOL_FIELD(deferrable);
WRITE_BOOL_FIELD(initdeferred);
WRITE_BOOL_FIELD(concurrent);
+ WRITE_OID_FIELD(oldNode);
}
static void
*** a/src/include/commands/defrem.h
--- b/src/include/commands/defrem.h
***************
*** 18,24 ****
/* commands/indexcmds.c */
! extern void DefineIndex(RangeVar *heapRelation,
char *indexRelationName,
Oid indexRelationId,
char *accessMethodName,
--- 18,24 ----
/* commands/indexcmds.c */
! extern Oid DefineIndex(RangeVar *heapRelation,
char *indexRelationName,
Oid indexRelationId,
char *accessMethodName,
***************
*** 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/include/nodes/parsenodes.h
--- b/src/include/nodes/parsenodes.h
***************
*** 1972,1977 **** typedef struct IndexStmt
--- 1972,1978 ----
bool deferrable; /* is the constraint DEFERRABLE? */
bool initdeferred; /* is the constraint INITIALLY DEFERRED? */
bool concurrent; /* should this be a concurrent index build? */
+ Oid oldNode; /* relfilenode of my former self */
} IndexStmt;
/* ----------------------
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 2125,2131 **** 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"
--- 2126,2131 ----
***************
*** 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"
***************
*** 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"
***************
*** 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"
***************
*** 2181,2187 **** 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"
--- 2184,2189 ----
***************
*** 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"
***************
*** 2217,2222 **** DEBUG: Rebuilding index "t_string_idx1"
--- 2220,2226 ----
DEBUG: Rebuilding index "t_string_idx"
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"
***************
*** 2236,2245 **** 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"
--- 2240,2248 ----
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"
***************
*** 2258,2265 **** DEBUG: Rebuilding index "t_string_idx1"
--- 2261,2270 ----
DEBUG: Rebuilding index "t_string_idx"
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"
***************
*** 2277,2282 **** DEBUG: Rebuilding index "t_string_idx"
--- 2282,2288 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
ALTER TABLE t ALTER stamp TYPE timestamp(1); -- rewrite
DEBUG: Rewriting table "t"
***************
*** 2295,2305 **** 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"
--- 2301,2310 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
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"
***************
*** 2318,2325 **** DEBUG: Rebuilding index "t_string_idx"
--- 2323,2332 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
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"
***************
*** 2336,2341 **** DEBUG: Rebuilding index "t_string_idx"
--- 2343,2349 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
ALTER TABLE t ALTER timegap TYPE interval(1); -- rewrite
***************
*** 2354,2368 **** 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
--- 2362,2375 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
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
***************
*** 2380,2385 **** DEBUG: Rebuilding index "t_string_idx"
--- 2387,2393 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_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 ----
***************
*** 2409,2421 **** 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"
--- 2415,2426 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
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"
***************
*** 2430,2435 **** DEBUG: Rebuilding index "t_string_idx"
--- 2435,2441 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_key"
***************
*** 2451,2456 **** DEBUG: Rebuilding index "t_string_idx"
--- 2457,2463 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_key"
***************
*** 2471,2476 **** DEBUG: Rebuilding index "t_string_idx"
--- 2478,2484 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_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 ----
***************
*** 2492,2497 **** DEBUG: Rebuilding index "t_string_idx"
--- 2499,2505 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_key"
***************
*** 2513,2518 **** DEBUG: Rebuilding index "t_string_idx"
--- 2521,2527 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_key"
***************
*** 2530,2535 **** DEBUG: Rebuilding index "t_string_idx"
--- 2539,2545 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_key"
***************
*** 2552,2557 **** DEBUG: Rebuilding index "t_string_idx"
--- 2562,2568 ----
DEBUG: Rebuilding index "t_daytimetz_key"
DEBUG: Rebuilding index "t_daytime_key"
DEBUG: Rebuilding index "t_stamptz_key"
+ DEBUG: Rebuilding index "t_stamptz_excl"
DEBUG: Rebuilding index "t_stamp_key"
DEBUG: Rebuilding index "t_timegap_key"
DEBUG: Rebuilding index "t_bits_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