*** 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 | | {ab,cd} | ((0,0),(0,1),(1,1),(1,0))
! 2 | 3 | 4 | 1.15 | 1.16 | 5 | 11.1200 | fo | 09:44:00.2 | 09:44:00.3+00 | Sat Jan 01 02:44:00.4 2000 UTC | Sat Jan 01 16:44:00.5 2000 | @ 2.6 secs | 00110 | 10.1.0.0/16 | | {ef,gh} | ((0,0),(0,2),(2,2),(2,0))
(2 rows)
SELECT relname, relnamespace, relowner, relam, reltablespace, relhasindex,
--- 2574,2583 ----
DEBUG: Rebuilding index "u1"
-- Data and catalog end state. We omit the columns that bear unstable OIDs.
SELECT * FROM t ORDER BY 1;
! constraint0 | constraint1 | constraint2 | constraint3 | constraint4 | integral | rational | string | daytimetz | daytime | stamptz | stamp | timegap | bits | network | document | strarr | square
! -------------+-------------+-------------+-------------+-------------+----------+----------+--------+------------+---------------+----------------------------+--------------------------------+------------+-------+-------------+----------------------+---------+---------------------------
! 1 | 2 | 3 | 1.05 | 1.06 | 4 | 10.1200 | fo | 08:44:00.2 | 08:44:00.3+00 | Sat Jan 01 01:44:00.4 2000 | Sat Jan 01 15:44:00.5 2000 UTC | @ 1.6 secs | 01110 | 10.0.0.0/16 | | {ab,cd} | ((0,0),(0,1),(1,1),(1,0))
! 2 | 3 | 4 | 1.15 | 1.16 | 5 | 11.1200 | fo | 09:44:00.2 | 09:44:00.3+00 | Sat Jan 01 02:44:00.4 2000 | Sat Jan 01 16:44:00.5 2000 UTC | @ 2.6 secs | 00110 | 10.1.0.0/16 | | {ef,gh} | ((0,0),(0,2),(2,2),(2,0))
(2 rows)
SELECT relname, relnamespace, relowner, relam, reltablespace, relhasindex,
***************
*** 2578,2584 **** FROM pg_class WHERE oid = 't'::regclass
ORDER BY 1;
relname | relnamespace | relowner | relam | reltablespace | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasexclusion | relhasrules | relhastriggers | relacl | reloptions
-------------------+--------------+----------+-------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-----------------+-------------+----------------+--------+------------
! t | 2200 | 10 | 0 | 0 | t | f | p | r | 18 | 1 | f | f | f | f | t | |
t_bits_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_constraint4_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_daytime_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
--- 2589,2595 ----
ORDER BY 1;
relname | relnamespace | relowner | relam | reltablespace | relhasindex | relisshared | relpersistence | relkind | relnatts | relchecks | relhasoids | relhaspkey | relhasexclusion | relhasrules | relhastriggers | relacl | reloptions
-------------------+--------------+----------+-------+---------------+-------------+-------------+----------------+---------+----------+-----------+------------+------------+-----------------+-------------+----------------+--------+------------
! t | 2200 | 10 | 0 | 0 | t | f | p | r | 18 | 1 | f | f | t | f | t | |
t_bits_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_constraint4_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_daytime_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
***************
*** 2589,2594 **** ORDER BY 1;
--- 2600,2606 ----
t_rational_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_square_idx | 2200 | 10 | 783 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_stamp_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
+ t_stamptz_excl | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | t | f | f | |
t_stamptz_key | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_strarr_idx | 2200 | 10 | 2742 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
t_string_idx | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
***************
*** 2597,2603 **** ORDER BY 1;
t_touchy_f_idx | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
u0 | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
u1 | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
! (19 rows)
SELECT relname, indnatts, indisunique, indisprimary, indimmediate,
indisclustered, indisvalid, indcheckxmin, indisready, indkey, indclass,
--- 2609,2615 ----
t_touchy_f_idx | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
u0 | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
u1 | 2200 | 10 | 403 | 0 | f | f | p | i | 1 | 0 | f | f | f | f | f | |
! (20 rows)
SELECT relname, indnatts, indisunique, indisprimary, indimmediate,
indisclustered, indisvalid, indcheckxmin, indisready, indkey, indclass,
***************
*** 2615,2622 **** WHERE indrelid = 't'::regclass ORDER BY 1;
t_network_key | 1 | t | f | t | f | t | f | t | 15 | 10025 | 0
t_rational_key | 1 | t | f | t | f | t | f | t | 7 | 10037 | 0
t_square_idx | 1 | f | f | t | f | t | f | t | 18 | 10076 | 0
! t_stamp_key | 1 | t | f | t | f | t | f | t | 12 | 10054 | 0
! t_stamptz_key | 1 | t | f | t | f | t | f | t | 11 | 10047 | 0
t_strarr_idx | 1 | f | f | t | f | t | f | t | 17 | 10079 | 0
t_string_idx | 1 | f | f | t | f | t | f | t | 8 | 10012 | 0
t_string_idx1 | 1 | f | f | t | f | t | f | t | 8 | 10013 | 0
--- 2627,2635 ----
t_network_key | 1 | t | f | t | f | t | f | t | 15 | 10025 | 0
t_rational_key | 1 | t | f | t | f | t | f | t | 7 | 10037 | 0
t_square_idx | 1 | f | f | t | f | t | f | t | 18 | 10076 | 0
! t_stamp_key | 1 | t | f | t | f | t | f | t | 12 | 10047 | 0
! t_stamptz_excl | 1 | f | f | t | f | t | f | t | 11 | 10054 | 0
! t_stamptz_key | 1 | t | f | t | f | t | f | t | 11 | 10054 | 0
t_strarr_idx | 1 | f | f | t | f | t | f | t | 17 | 10079 | 0
t_string_idx | 1 | f | f | t | f | t | f | t | 8 | 10012 | 0
t_string_idx1 | 1 | f | f | t | f | t | f | t | 8 | 10013 | 0
***************
*** 2624,2630 **** WHERE indrelid = 't'::regclass ORDER BY 1;
t_touchy_f_idx | 1 | t | f | t | f | t | f | t | 0 | 1978 | 0
u0 | 1 | t | f | t | f | t | f | t | 6 | 1978 | 0
u1 | 1 | t | f | t | f | t | f | t | 6 | 1978 | 0
! (18 rows)
SELECT relname, attname, atttypid, attstattarget, attlen, attnum, attndims,
attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull,
--- 2637,2643 ----
t_touchy_f_idx | 1 | t | f | t | f | t | f | t | 0 | 1978 | 0
u0 | 1 | t | f | t | f | t | f | t | 6 | 1978 | 0
u1 | 1 | t | f | t | f | t | f | t | 6 | 1978 | 0
! (19 rows)
SELECT relname, attname, atttypid, attstattarget, attlen, attnum, attndims,
attcacheoff, atttypmod, attbyval, attstorage, attalign, attnotnull,
***************
*** 2651,2658 **** ORDER BY 1, 2;
t | network | 650 | -1 | -1 | 15 | 0 | -1 | -1 | f | m | i | t | f | f | t | 0 | |
t | rational | 1700 | -1 | -1 | 7 | 0 | -1 | -1 | f | m | i | t | f | f | t | 0 | |
t | square | 604 | -1 | -1 | 18 | 0 | -1 | -1 | f | x | d | t | f | f | t | 0 | |
! t | stamp | 1114 | -1 | 8 | 12 | 0 | -1 | -1 | t | p | d | t | f | f | t | 0 | |
! t | stamptz | 1184 | -1 | 8 | 11 | 0 | -1 | -1 | t | p | d | t | f | f | t | 0 | |
t | strarr | 1009 | -1 | -1 | 17 | 1 | -1 | -1 | f | x | i | t | f | f | t | 0 | |
t | string | 1042 | -1 | -1 | 8 | 0 | -1 | 8 | f | x | i | t | f | f | t | 0 | |
t | tableoid | 26 | 0 | 4 | -7 | 0 | -1 | -1 | t | p | i | t | f | f | t | 0 | |
--- 2664,2671 ----
t | network | 650 | -1 | -1 | 15 | 0 | -1 | -1 | f | m | i | t | f | f | t | 0 | |
t | rational | 1700 | -1 | -1 | 7 | 0 | -1 | -1 | f | m | i | t | f | f | t | 0 | |
t | square | 604 | -1 | -1 | 18 | 0 | -1 | -1 | f | x | d | t | f | f | t | 0 | |
! t | stamp | 1184 | -1 | 8 | 12 | 0 | -1 | -1 | t | p | d | t | f | f | t | 0 | |
! t | stamptz | 1114 | -1 | 8 | 11 | 0 | -1 | -1 | t | p | d | t | f | f | t | 0 | |
t | strarr | 1009 | -1 | -1 | 17 | 1 | -1 | -1 | f | x | i | t | f | f | t | 0 | |
t | string | 1042 | -1 | -1 | 8 | 0 | -1 | 8 | f | x | i | t | f | f | t | 0 | |
t | tableoid | 26 | 0 | 4 | -7 | 0 | -1 | -1 | t | p | i | t | f | f | t | 0 | |
***************
*** 2668,2675 **** ORDER BY 1, 2;
t_network_key | network | 650 | -1 | -1 | 1 | 0 | -1 | -1 | f | m | i | f | f | f | t | 0 | |
t_rational_key | rational | 1700 | -1 | -1 | 1 | 0 | -1 | -1 | f | m | i | f | f | f | t | 0 | |
t_square_idx | square | 603 | -1 | 32 | 1 | 0 | -1 | -1 | f | p | d | f | f | f | t | 0 | |
! t_stamp_key | stamp | 1114 | -1 | 8 | 1 | 0 | -1 | -1 | t | p | d | f | f | f | t | 0 | |
! t_stamptz_key | stamptz | 1184 | -1 | 8 | 1 | 0 | -1 | -1 | t | p | d | f | f | f | t | 0 | |
t_strarr_idx | strarr | 25 | -1 | -1 | 1 | 1 | -1 | -1 | f | x | i | f | f | f | t | 0 | |
t_string_idx | string | 1042 | -1 | -1 | 1 | 0 | -1 | 8 | f | x | i | f | f | f | t | 0 | |
t_string_idx1 | string | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
--- 2681,2689 ----
t_network_key | network | 650 | -1 | -1 | 1 | 0 | -1 | -1 | f | m | i | f | f | f | t | 0 | |
t_rational_key | rational | 1700 | -1 | -1 | 1 | 0 | -1 | -1 | f | m | i | f | f | f | t | 0 | |
t_square_idx | square | 603 | -1 | 32 | 1 | 0 | -1 | -1 | f | p | d | f | f | f | t | 0 | |
! t_stamp_key | stamp | 1184 | -1 | 8 | 1 | 0 | -1 | -1 | t | p | d | f | f | f | t | 0 | |
! t_stamptz_excl | stamptz | 1114 | -1 | 8 | 1 | 0 | -1 | -1 | t | p | d | f | f | f | t | 0 | |
! t_stamptz_key | stamptz | 1114 | -1 | 8 | 1 | 0 | -1 | -1 | t | p | d | f | f | f | t | 0 | |
t_strarr_idx | strarr | 25 | -1 | -1 | 1 | 1 | -1 | -1 | f | x | i | f | f | f | t | 0 | |
t_string_idx | string | 1042 | -1 | -1 | 1 | 0 | -1 | 8 | f | x | i | f | f | f | t | 0 | |
t_string_idx1 | string | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
***************
*** 2677,2683 **** ORDER BY 1, 2;
t_touchy_f_idx | touchy_f | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
u0 | integral | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
u1 | integral | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
! (42 rows)
SELECT conname, connamespace, contype, condeferrable, condeferred, confupdtype,
confdeltype, confmatchtype, conislocal, coninhcount, conkey, confkey,
--- 2691,2697 ----
t_touchy_f_idx | touchy_f | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
u0 | integral | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
u1 | integral | 23 | -1 | 4 | 1 | 0 | -1 | -1 | t | p | i | f | f | f | t | 0 | |
! (43 rows)
SELECT conname, connamespace, contype, condeferrable, condeferred, confupdtype,
confdeltype, confmatchtype, conislocal, coninhcount, conkey, confkey,
***************
*** 2696,2706 **** ORDER BY 1;
t_network_key | 2200 | u | f | f | | | | t | 0 | {15} | | | | | |
t_rational_key | 2200 | u | f | f | | | | t | 0 | {7} | | | | | |
t_stamp_key | 2200 | u | f | f | | | | t | 0 | {12} | | | | | |
t_stamptz_key | 2200 | u | f | f | | | | t | 0 | {11} | | | | | |
t_timegap_key | 2200 | u | f | f | | | | t | 0 | {13} | | | | | |
u0 | 2200 | u | f | f | | | | t | 0 | {6} | | | | | |
u1 | 2200 | u | f | f | | | | t | 0 | {6} | | | | | |
! (14 rows)
-- RI trigger names include the table OID. We don't have a great sort order
-- available, but tgname probably serves acceptably in practice.
--- 2710,2721 ----
t_network_key | 2200 | u | f | f | | | | t | 0 | {15} | | | | | |
t_rational_key | 2200 | u | f | f | | | | t | 0 | {7} | | | | | |
t_stamp_key | 2200 | u | f | f | | | | t | 0 | {12} | | | | | |
+ t_stamptz_excl | 2200 | x | f | f | | | | t | 0 | {11} | | | | | {2060} |
t_stamptz_key | 2200 | u | f | f | | | | t | 0 | {11} | | | | | |
t_timegap_key | 2200 | u | f | f | | | | t | 0 | {13} | | | | | |
u0 | 2200 | u | f | f | | | | t | 0 | {6} | | | | | |
u1 | 2200 | u | f | f | | | | t | 0 | {6} | | | | | |
! (15 rows)
-- RI trigger names include the table OID. We don't have a great sort order
-- available, but tgname probably serves acceptably in practice.
*** a/src/test/regress/sql/alter_table.sql
--- b/src/test/regress/sql/alter_table.sql
***************
*** 1141,1146 **** CREATE TABLE t (
--- 1141,1147 ----
strarr varchar(2)[] NOT NULL,
square box NOT NULL,
+ EXCLUDE (stamptz WITH =),
CHECK (touchy_f(constraint0) < 10)
);
CREATE INDEX ON t (string);
***************
*** 1307,1312 **** ALTER TABLE t ALTER stamptz TYPE timestamp; -- noop
--- 1308,1314 ----
SET timezone = 'Asia/Jakarta';
ALTER TABLE t ALTER stamptz TYPE timestamptz; -- rewrite
SET timezone = 'UTC';
+ ALTER TABLE t ALTER stamptz TYPE timestamp; -- noop
ALTER TABLE t ALTER stamp TYPE timestamp(3); -- rewrite-v
ALTER TABLE t ALTER stamp TYPE timestamp(1); -- rewrite
***************
*** 1315,1320 **** ALTER TABLE t ALTER stamp TYPE timestamptz; -- noop
--- 1317,1323 ----
SET timezone = 'Asia/Jakarta';
ALTER TABLE t ALTER stamp TYPE timestamp; -- rewrite
SET timezone = 'UTC';
+ ALTER TABLE t ALTER stamp TYPE timestamptz; -- noop
ALTER TABLE t ALTER timegap TYPE interval(3); -- rewrite-v
ALTER TABLE t ALTER timegap TYPE interval(1); -- rewrite