From 94280e5f3a3f3c778e391a1c3a34ba4affeaa73b Mon Sep 17 00:00:00 2001 From: David Geier Date: Fri, 18 Sep 2026 12:52:47 +0200 Subject: [PATCH v4 1/7] Assert CacheMemoryContext exists in relcache callers RelationCacheInitialize() creates CacheMemoryContext before catalog or relcache access can occur. Replace defensive creation in later code paths with assertions so calls made before relcache initialization fail immediately in assertion-enabled builds. --- src/backend/utils/cache/relcache.c | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/backend/utils/cache/relcache.c b/src/backend/utils/cache/relcache.c index d8f04a05309..a04e8a7fa93 100644 --- a/src/backend/utils/cache/relcache.c +++ b/src/backend/utils/cache/relcache.c @@ -1671,15 +1671,13 @@ LookupOpclassInfo(Oid operatorClassOid, HeapTuple htup; bool indexOK; + Assert(CacheMemoryContext != NULL); + if (OpClassCache == NULL) { /* First time through: initialize the opclass cache */ HASHCTL ctl; - /* Also make sure CacheMemoryContext exists */ - if (!CacheMemoryContext) - CreateCacheMemoryContext(); - ctl.keysize = sizeof(Oid); ctl.entrysize = sizeof(OpClassCacheEnt); OpClassCache = hash_create("Operator class cache", 64, @@ -3561,13 +3559,11 @@ RelationBuildLocalRelation(const char *relname, /* Shared relations had better be mapped, too */ Assert(mapped_relation || !shared_relation); + Assert(CacheMemoryContext != NULL); /* * switch to the cache context to create the relcache entry. */ - if (!CacheMemoryContext) - CreateCacheMemoryContext(); - oldcxt = MemoryContextSwitchTo(CacheMemoryContext); /* -- 2.55.0