From 46d28820b6d213bf26b24ecd289a1c466ecf1956 Mon Sep 17 00:00:00 2001 From: Bruce Momjian Date: Thu, 6 Jan 2011 22:44:57 -0500 Subject: [PATCH] Improve C comments about backend variables set by pg_upgrade_support functions. --- contrib/pg_upgrade/pg_upgrade.c | 22 ++++++++++++++++++++++ src/backend/catalog/heap.c | 7 +++++-- src/backend/catalog/index.c | 7 +++++-- src/backend/catalog/pg_enum.c | 7 ++++--- src/backend/catalog/pg_type.c | 3 +++ src/backend/catalog/toasting.c | 3 ++- src/backend/commands/typecmds.c | 3 ++- 7 files changed, 43 insertions(+), 9 deletions(-) diff --git a/contrib/pg_upgrade/pg_upgrade.c b/contrib/pg_upgrade/pg_upgrade.c index 64fb8f8398..820445ce55 100644 --- a/contrib/pg_upgrade/pg_upgrade.c +++ b/contrib/pg_upgrade/pg_upgrade.c @@ -7,6 +7,28 @@ * contrib/pg_upgrade/pg_upgrade.c */ +/* + * To simplify the upgrade process, we force certain system items to be + * consistent between old and new clusters: + * + * We control all assignments of pg_class.relfilenode so we can keep the + * same relfilenodes for old and new files. The only exception is + * pg_largeobject, pg_largeobject_metadata, and its indexes, which can + * change due to a cluster, reindex, or vacuum full. (We don't create + * those so have no control over their oid/relfilenode values.) + * + * While pg_class.oid and pg_class.relfilenode are intially the same, they + * can diverge due to cluster, reindex, or vacuum full. The new cluster + * will again have matching pg_class.relfilenode and pg_class.oid values, + * but based on the new relfilenode value, so the old/new oids might + * differ. + * + * We control all assignments of pg_type.oid because these are stored + * in composite types. + */ + + + #include "pg_upgrade.h" #ifdef HAVE_LANGINFO_H diff --git a/src/backend/catalog/heap.c b/src/backend/catalog/heap.c index 4c55db7e3c..b36efcdba3 100644 --- a/src/backend/catalog/heap.c +++ b/src/backend/catalog/heap.c @@ -73,7 +73,7 @@ #include "utils/tqual.h" -/* Kluge for upgrade-in-place support */ +/* Potentially set by contrib/pg_upgrade_support functions */ Oid binary_upgrade_next_heap_relfilenode = InvalidOid; Oid binary_upgrade_next_toast_relfilenode = InvalidOid; @@ -986,7 +986,10 @@ heap_create_with_catalog(const char *relname, */ if (!OidIsValid(relid)) { - /* Use binary-upgrade overrides if applicable */ + /* + * Use binary-upgrade override for pg_class.relfilenode/oid, + * if supplied. + */ if (OidIsValid(binary_upgrade_next_heap_relfilenode) && (relkind == RELKIND_RELATION || relkind == RELKIND_SEQUENCE || relkind == RELKIND_VIEW || relkind == RELKIND_COMPOSITE_TYPE || diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c index 4dd89e18aa..b45db4c9ec 100644 --- a/src/backend/catalog/index.c +++ b/src/backend/catalog/index.c @@ -68,7 +68,7 @@ #include "utils/tqual.h" -/* Kluge for upgrade-in-place support */ +/* Potentially set by contrib/pg_upgrade_support functions */ Oid binary_upgrade_next_index_relfilenode = InvalidOid; /* state info for validate_index bulkdelete callback */ @@ -640,7 +640,10 @@ index_create(Oid heapRelationId, */ if (!OidIsValid(indexRelationId)) { - /* Use binary-upgrade override if applicable */ + /* + * Use binary-upgrade override for pg_class.relfilenode/oid, + * if supplied. + */ if (OidIsValid(binary_upgrade_next_index_relfilenode)) { indexRelationId = binary_upgrade_next_index_relfilenode; diff --git a/src/backend/catalog/pg_enum.c b/src/backend/catalog/pg_enum.c index 0cc0a0c1b3..e87a9311bd 100644 --- a/src/backend/catalog/pg_enum.c +++ b/src/backend/catalog/pg_enum.c @@ -28,6 +28,7 @@ #include "utils/tqual.h" +/* Potentially set by contrib/pg_upgrade_support functions */ Oid binary_upgrade_next_pg_enum_oid = InvalidOid; static void RenumberEnumType(Relation pg_enum, HeapTuple *existing, int nelems); @@ -313,9 +314,9 @@ restart: if (OidIsValid(binary_upgrade_next_pg_enum_oid)) { /* - * In binary upgrades, just add the new label with the predetermined - * Oid. It's pg_upgrade's responsibility that the Oid meets - * requirements. + * Use binary-upgrade override for pg_enum.oid, if supplied. + * During binary upgrade, all pg_enum.oid's are set this way + * so they are guaranteed to be consistent. */ if (neighbor != NULL) ereport(ERROR, diff --git a/src/backend/catalog/pg_type.c b/src/backend/catalog/pg_type.c index 69ff191ca8..9c249a7ff7 100644 --- a/src/backend/catalog/pg_type.c +++ b/src/backend/catalog/pg_type.c @@ -33,6 +33,7 @@ #include "utils/rel.h" #include "utils/syscache.h" +/* Potentially set by contrib/pg_upgrade_support functions */ Oid binary_upgrade_next_pg_type_oid = InvalidOid; /* ---------------------------------------------------------------- @@ -121,6 +122,7 @@ TypeShellMake(const char *typeName, Oid typeNamespace, Oid ownerId) */ tup = heap_form_tuple(tupDesc, values, nulls); + /* Use binary-upgrade override for pg_type.oid, if supplied. */ if (OidIsValid(binary_upgrade_next_pg_type_oid)) { HeapTupleSetOid(tup, binary_upgrade_next_pg_type_oid); @@ -422,6 +424,7 @@ TypeCreate(Oid newTypeOid, /* Force the OID if requested by caller */ if (OidIsValid(newTypeOid)) HeapTupleSetOid(tup, newTypeOid); + /* Use binary-upgrade override for pg_type.oid, if supplied. */ else if (OidIsValid(binary_upgrade_next_pg_type_oid)) { HeapTupleSetOid(tup, binary_upgrade_next_pg_type_oid); diff --git a/src/backend/catalog/toasting.c b/src/backend/catalog/toasting.c index 59838e305f..e495122681 100644 --- a/src/backend/catalog/toasting.c +++ b/src/backend/catalog/toasting.c @@ -31,7 +31,7 @@ #include "utils/builtins.h" #include "utils/syscache.h" -/* Kluges for upgrade-in-place support */ +/* Potentially set by contrib/pg_upgrade_support functions */ extern Oid binary_upgrade_next_toast_relfilenode; Oid binary_upgrade_next_pg_type_toast_oid = InvalidOid; @@ -200,6 +200,7 @@ create_toast_table(Relation rel, Oid toastOid, Oid toastIndexOid, Datum reloptio else namespaceid = PG_TOAST_NAMESPACE; + /* Use binary-upgrade override for pg_type.oid, if supplied. */ if (OidIsValid(binary_upgrade_next_pg_type_toast_oid)) { toast_typid = binary_upgrade_next_pg_type_toast_oid; diff --git a/src/backend/commands/typecmds.c b/src/backend/commands/typecmds.c index 113bede89f..bc66c3e640 100644 --- a/src/backend/commands/typecmds.c +++ b/src/backend/commands/typecmds.c @@ -74,6 +74,7 @@ typedef struct /* atts[] is of allocated length RelationGetNumberOfAttributes(rel) */ } RelToCheck; +/* Potentially set by contrib/pg_upgrade_support functions */ Oid binary_upgrade_next_pg_type_array_oid = InvalidOid; static Oid findTypeInputFunction(List *procname, Oid typeOid); @@ -1517,7 +1518,7 @@ AssignTypeArrayOid(void) { Oid type_array_oid; - /* Pre-assign the type's array OID for use in pg_type.typarray */ + /* Use binary-upgrade override for pg_type.typarray, if supplied. */ if (OidIsValid(binary_upgrade_next_pg_type_array_oid)) { type_array_oid = binary_upgrade_next_pg_type_array_oid; -- 2.40.0