diff options
Diffstat (limited to 'src/backend/catalog/heap.c')
-rw-r--r-- | src/backend/catalog/heap.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 263205855b2..db51e0b6084 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -30,6 +30,7 @@ #include "postgres.h" #include "access/htup_details.h" +#include "access/multixact.h" #include "access/sysattr.h" #include "access/transam.h" #include "access/xact.h" @@ -779,6 +780,7 @@ InsertPgClassTuple(Relation pg_class_desc, values[Anum_pg_class_relhastriggers - 1] = BoolGetDatum(rd_rel->relhastriggers); values[Anum_pg_class_relhassubclass - 1] = BoolGetDatum(rd_rel->relhassubclass); values[Anum_pg_class_relfrozenxid - 1] = TransactionIdGetDatum(rd_rel->relfrozenxid); + values[Anum_pg_class_relminmxid - 1] = MultiXactIdGetDatum(rd_rel->relminmxid); if (relacl != (Datum) 0) values[Anum_pg_class_relacl - 1] = relacl; else @@ -854,7 +856,7 @@ AddNewRelationTuple(Relation pg_class_desc, break; } - /* Initialize relfrozenxid */ + /* Initialize relfrozenxid and relminmxid */ if (relkind == RELKIND_RELATION || relkind == RELKIND_TOASTVALUE) { @@ -864,6 +866,15 @@ AddNewRelationTuple(Relation pg_class_desc, * that will do. */ new_rel_reltup->relfrozenxid = RecentXmin; + /* + * Similarly, initialize the minimum Multixact to the first value that + * could possibly be stored in tuples in the table. Running + * transactions could reuse values from their local cache, so we are + * careful to consider all currently running multis. + * + * XXX this could be refined further, but is it worth the hassle? + */ + new_rel_reltup->relminmxid = GetOldestMultiXactId(); } else { @@ -874,6 +885,7 @@ AddNewRelationTuple(Relation pg_class_desc, * commands/sequence.c.) */ new_rel_reltup->relfrozenxid = InvalidTransactionId; + new_rel_reltup->relfrozenxid = InvalidMultiXactId; } new_rel_reltup->relowner = relowner; |