At Mon, 22 Mar 2021 13:12:10 -0400, Bruce Momjian <br...@momjian.us> wrote in 
> On Thu, Jan 28, 2021 at 05:16:52PM +0900, Kyotaro Horiguchi wrote:
> > At Thu, 28 Jan 2021 16:50:44 +0900 (JST), Kyotaro Horiguchi 
> > <horikyota....@gmail.com> wrote in 
> > > I was going to write in the doc something like "you can inspect memory
> > > consumption by catalog caches using pg_backend_memory_contexts", but
> > > all the memory used by catalog cache is in CacheMemoryContext.  Is it
> > > sensible for each catalog cache to have their own contexts?
> > 
> > Something like this.
> 
> Is this feature not going to make it into PG 14?  It first appeared in
> the January, 2017 commitfest:
> 
>       https://commitfest.postgresql.org/32/931/

Thank you for looking this. However, I'm afraid that you are looking
to a patch which is not a part of the project in CF, "Protect syscache
<blah>".  I'm happy if it is committed.

It is intending not only to show more meaningful information by
pg_get_backend_memory_contexts(), but also to make it easy to
investigate what kind of cache is bloating or something like that.

With the patch, the functions shows individual context information
lines for catcaches.

> postgres=# select pg_get_backend_memory_contexts();
...
>  (catcache,"catcache id 78",CacheMemoryContext,2,8192,1,6152,0,2040)
>  (catcache,"catcache id 77",CacheMemoryContext,2,8192,1,6152,0,2040)
>  (catcache,"catcache id 76",CacheMemoryContext,2,16384,2,7592,3,8792)

Applying catcachecxt_by_name.patch.txt on top of it changes the output
as the following. The names are not familiar to users, but give far
clearer information.

>  (catcache,USERMAPPINGUSERSERVER,CacheMemoryContext,2,8192,1,6192,0,2000)
>  (catcache,USERMAPPINGOID,CacheMemoryContext,2,8192,1,6192,0,2000)
>  (catcache,TYPEOID,CacheMemoryContext,2,16384,2,7632,0,8752)

Applying catcachecxt_by_name_id.patch.xt on top of the _by_name.patch,
the output further changes as the following.

>  (catcache,USERMAPPINGUSERSERVER[78],CacheMemoryContext,2,8192,1,6136,0,2056)
>  (catcache,USERMAPPINGOID[77],CacheMemoryContext,2,8192,1,6136,0,2056)
>  (catcache,TYPEOID[76],CacheMemoryContext,2,16384,2,7592,3,8792)

The number enclosed by brackets is cache id. It is useles for users
but convenient for debugging:p

catcache_individual_mcxt_2.patch.txt: rebased version of per-catcache context.
catcachecxt_by_name.patch.txt: gives a meaningful name to catcache contexts.
catcachecxt_by_name_id.patch.txt: and adds cache id.

regards.

-- 
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/src/backend/utils/cache/catcache.c 
b/src/backend/utils/cache/catcache.c
index 55c9445898..7d318cf7aa 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -769,6 +769,8 @@ InitCatCache(int id,
 {
        CatCache   *cp;
        MemoryContext oldcxt;
+       MemoryContext mycxt;
+       char            name[32];
        size_t          sz;
        int                     i;
 
@@ -792,7 +794,12 @@ InitCatCache(int id,
        if (!CacheMemoryContext)
                CreateCacheMemoryContext();
 
-       oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+       mycxt = AllocSetContextCreate(CacheMemoryContext, "catcache",
+                                                                 
ALLOCSET_DEFAULT_SIZES);
+
+       snprintf(name, sizeof(name), "catcache id %d", id);
+       oldcxt = MemoryContextSwitchTo(mycxt);
+       MemoryContextSetIdentifier(mycxt, (const char *)pstrdup(name));
 
        /*
         * if first time through, initialize the cache group header
@@ -833,6 +840,7 @@ InitCatCache(int id,
        cp->cc_nkeys = nkeys;
        for (i = 0; i < nkeys; ++i)
                cp->cc_keyno[i] = key[i];
+       cp->cc_mcxt = mycxt;
 
        /*
         * new cache is initialized as far as we can go for now. print some
@@ -932,12 +940,12 @@ CatalogCacheInitializeCache(CatCache *cache)
        relation = table_open(cache->cc_reloid, AccessShareLock);
 
        /*
-        * switch to the cache context so our allocations do not vanish at the 
end
-        * of a transaction
+        * switch to our own context under the cache context so our allocations 
do
+        * not vanish at the end of a transaction
         */
-       Assert(CacheMemoryContext != NULL);
+       Assert(CacheMemoryContext != NULL && cache->cc_mcxt != NULL);
 
-       oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+       oldcxt = MemoryContextSwitchTo(cache->cc_mcxt);
 
        /*
         * copy the relcache's tuple descriptor to permanent cache storage
@@ -998,7 +1006,7 @@ CatalogCacheInitializeCache(CatCache *cache)
                 */
                fmgr_info_cxt(eqfunc,
                                          &cache->cc_skey[i].sk_func,
-                                         CacheMemoryContext);
+                                         cache->cc_mcxt);
 
                /* Initialize sk_attno suitably for HeapKeyTest() and heap 
scans */
                cache->cc_skey[i].sk_attno = cache->cc_keyno[i];
@@ -1697,7 +1705,7 @@ SearchCatCacheList(CatCache *cache,
                table_close(relation, AccessShareLock);
 
                /* Now we can build the CatCList entry. */
-               oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+               oldcxt = MemoryContextSwitchTo(cache->cc_mcxt);
                nmembers = list_length(ctlist);
                cl = (CatCList *)
                        palloc(offsetof(CatCList, members) + nmembers * 
sizeof(CatCTup *));
@@ -1830,7 +1838,7 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, 
Datum *arguments,
                        dtp = ntp;
 
                /* Allocate memory for CatCTup and the cached tuple in one go */
-               oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+               oldcxt = MemoryContextSwitchTo(cache->cc_mcxt);
 
                ct = (CatCTup *) palloc(sizeof(CatCTup) +
                                                                MAXIMUM_ALIGNOF 
+ dtp->t_len);
@@ -1865,7 +1873,7 @@ CatalogCacheCreateEntry(CatCache *cache, HeapTuple ntp, 
Datum *arguments,
        else
        {
                Assert(negative);
-               oldcxt = MemoryContextSwitchTo(CacheMemoryContext);
+               oldcxt = MemoryContextSwitchTo(cache->cc_mcxt);
                ct = (CatCTup *) palloc(sizeof(CatCTup));
 
                /*
diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h
index ddc2762eb3..a32fea2f11 100644
--- a/src/include/utils/catcache.h
+++ b/src/include/utils/catcache.h
@@ -61,6 +61,7 @@ typedef struct catcache
        slist_node      cc_next;                /* list link */
        ScanKeyData cc_skey[CATCACHE_MAXKEYS];  /* precomputed key info for heap
                                                                                
         * scans */
+       MemoryContext   cc_mcxt;        /* memory context for this cache */
 
        /*
         * Keep these at the end, so that compiling catcache.c with 
CATCACHE_STATS
diff --git a/src/backend/utils/cache/catcache.c 
b/src/backend/utils/cache/catcache.c
index 7d318cf7aa..ffc7fac63b 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -763,6 +763,7 @@ CatCache *
 InitCatCache(int id,
                         Oid reloid,
                         Oid indexoid,
+                        char *idstr,
                         int nkeys,
                         const int *key,
                         int nbuckets)
@@ -770,7 +771,6 @@ InitCatCache(int id,
        CatCache   *cp;
        MemoryContext oldcxt;
        MemoryContext mycxt;
-       char            name[32];
        size_t          sz;
        int                     i;
 
@@ -797,9 +797,10 @@ InitCatCache(int id,
        mycxt = AllocSetContextCreate(CacheMemoryContext, "catcache",
                                                                  
ALLOCSET_DEFAULT_SIZES);
 
-       snprintf(name, sizeof(name), "catcache id %d", id);
        oldcxt = MemoryContextSwitchTo(mycxt);
-       MemoryContextSetIdentifier(mycxt, (const char *)pstrdup(name));
+
+       /* we can use idstr without copying since the caller gave us a const */
+       MemoryContextSetIdentifier(mycxt, idstr);
 
        /*
         * if first time through, initialize the cache group header
diff --git a/src/backend/utils/cache/syscache.c 
b/src/backend/utils/cache/syscache.c
index e4dc4ee34e..0fdcb71911 100644
--- a/src/backend/utils/cache/syscache.c
+++ b/src/backend/utils/cache/syscache.c
@@ -115,14 +115,16 @@ struct cachedesc
 {
        Oid                     reloid;                 /* OID of the relation 
being cached */
        Oid                     indoid;                 /* OID of index 
relation for this cache */
+       char       *cacheid;            /* identifier string */
        int                     nkeys;                  /* # of keys needed for 
cache lookup */
        int                     key[4];                 /* attribute numbers of 
key attrs */
        int                     nbuckets;               /* number of hash 
buckets for this cache */
 };
 
 static const struct cachedesc cacheinfo[] = {
-       {AggregateRelationId,           /* AGGFNOID */
+       {AggregateRelationId,
                AggregateFnoidIndexId,
+               "AGGFNOID",
                1,
                {
                        Anum_pg_aggregate_aggfnoid,
@@ -132,8 +134,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {AccessMethodRelationId,        /* AMNAME */
+       {AccessMethodRelationId,
                AmNameIndexId,
+               "AMNAME",
                1,
                {
                        Anum_pg_am_amname,
@@ -143,8 +146,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {AccessMethodRelationId,        /* AMOID */
+       {AccessMethodRelationId,
                AmOidIndexId,
+               "AMOID",
                1,
                {
                        Anum_pg_am_oid,
@@ -154,8 +158,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {AccessMethodOperatorRelationId,        /* AMOPOPID */
+       {AccessMethodOperatorRelationId,
                AccessMethodOperatorIndexId,
+               "AMOPOPID",
                3,
                {
                        Anum_pg_amop_amopopr,
@@ -165,8 +170,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {AccessMethodOperatorRelationId,        /* AMOPSTRATEGY */
+       {AccessMethodOperatorRelationId,
                AccessMethodStrategyIndexId,
+               "AMOPSTRATEGY",
                4,
                {
                        Anum_pg_amop_amopfamily,
@@ -176,8 +182,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {AccessMethodProcedureRelationId,       /* AMPROCNUM */
+       {AccessMethodProcedureRelationId,
                AccessMethodProcedureIndexId,
+               "AMPROCNUM",
                4,
                {
                        Anum_pg_amproc_amprocfamily,
@@ -187,8 +194,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {AttributeRelationId,           /* ATTNAME */
+       {AttributeRelationId,
                AttributeRelidNameIndexId,
+               "ATTNAME",
                2,
                {
                        Anum_pg_attribute_attrelid,
@@ -198,8 +206,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                32
        },
-       {AttributeRelationId,           /* ATTNUM */
+       {AttributeRelationId,
                AttributeRelidNumIndexId,
+               "ATTNUM",
                2,
                {
                        Anum_pg_attribute_attrelid,
@@ -209,8 +218,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                128
        },
-       {AuthMemRelationId,                     /* AUTHMEMMEMROLE */
+       {AuthMemRelationId,
                AuthMemMemRoleIndexId,
+               "AUTHMEMMEMROLE",
                2,
                {
                        Anum_pg_auth_members_member,
@@ -220,8 +230,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {AuthMemRelationId,                     /* AUTHMEMROLEMEM */
+       {AuthMemRelationId,
                AuthMemRoleMemIndexId,
+               "AUTHMEMROLEMEM",
                2,
                {
                        Anum_pg_auth_members_roleid,
@@ -231,8 +242,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {AuthIdRelationId,                      /* AUTHNAME */
+       {AuthIdRelationId,
                AuthIdRolnameIndexId,
+               "AUTHNAME",
                1,
                {
                        Anum_pg_authid_rolname,
@@ -242,8 +254,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {AuthIdRelationId,                      /* AUTHOID */
+       {AuthIdRelationId,
                AuthIdOidIndexId,
+               "AUTHOID",
                1,
                {
                        Anum_pg_authid_oid,
@@ -254,8 +267,9 @@ static const struct cachedesc cacheinfo[] = {
                8
        },
        {
-               CastRelationId,                 /* CASTSOURCETARGET */
+               CastRelationId,
                CastSourceTargetIndexId,
+                       "CASTSOURCETARGET",
                2,
                {
                        Anum_pg_cast_castsource,
@@ -265,8 +279,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                256
        },
-       {OperatorClassRelationId,       /* CLAAMNAMENSP */
+       {OperatorClassRelationId,
                OpclassAmNameNspIndexId,
+               "CLAAMNAMENSP",
                3,
                {
                        Anum_pg_opclass_opcmethod,
@@ -276,8 +291,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {OperatorClassRelationId,       /* CLAOID */
+       {OperatorClassRelationId,
                OpclassOidIndexId,
+               "CLAOID",
                1,
                {
                        Anum_pg_opclass_oid,
@@ -287,8 +303,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {CollationRelationId,           /* COLLNAMEENCNSP */
+       {CollationRelationId,
                CollationNameEncNspIndexId,
+               "COLLNAMEENCNSP",
                3,
                {
                        Anum_pg_collation_collname,
@@ -298,8 +315,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {CollationRelationId,           /* COLLOID */
+       {CollationRelationId,
                CollationOidIndexId,
+               "COLLOID",
                1,
                {
                        Anum_pg_collation_oid,
@@ -309,8 +327,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {ConversionRelationId,          /* CONDEFAULT */
+       {ConversionRelationId,
                ConversionDefaultIndexId,
+               "CONDEFAULT",
                4,
                {
                        Anum_pg_conversion_connamespace,
@@ -320,8 +339,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {ConversionRelationId,          /* CONNAMENSP */
+       {ConversionRelationId,
                ConversionNameNspIndexId,
+               "CONNAMENSP",
                2,
                {
                        Anum_pg_conversion_conname,
@@ -331,8 +351,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {ConstraintRelationId,          /* CONSTROID */
+       {ConstraintRelationId,
                ConstraintOidIndexId,
+               "CONSTROID",
                1,
                {
                        Anum_pg_constraint_oid,
@@ -342,8 +363,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {ConversionRelationId,          /* CONVOID */
+       {ConversionRelationId,
                ConversionOidIndexId,
+               "CONVOID",
                1,
                {
                        Anum_pg_conversion_oid,
@@ -353,8 +375,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {DatabaseRelationId,            /* DATABASEOID */
+       {DatabaseRelationId,
                DatabaseOidIndexId,
+               "DATABASEOID",
                1,
                {
                        Anum_pg_database_oid,
@@ -364,8 +387,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {DefaultAclRelationId,          /* DEFACLROLENSPOBJ */
+       {DefaultAclRelationId,
                DefaultAclRoleNspObjIndexId,
+               "DEFACLROLENSPOBJ",
                3,
                {
                        Anum_pg_default_acl_defaclrole,
@@ -375,8 +399,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {EnumRelationId,                        /* ENUMOID */
+       {EnumRelationId,
                EnumOidIndexId,
+               "ENUMOID",
                1,
                {
                        Anum_pg_enum_oid,
@@ -386,8 +411,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {EnumRelationId,                        /* ENUMTYPOIDNAME */
+       {EnumRelationId,
                EnumTypIdLabelIndexId,
+               "ENUMTYPOIDNAME",
                2,
                {
                        Anum_pg_enum_enumtypid,
@@ -397,8 +423,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {EventTriggerRelationId,        /* EVENTTRIGGERNAME */
+       {EventTriggerRelationId,
                EventTriggerNameIndexId,
+               "EVENTTRIGGERNAME",
                1,
                {
                        Anum_pg_event_trigger_evtname,
@@ -408,8 +435,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {EventTriggerRelationId,        /* EVENTTRIGGEROID */
+       {EventTriggerRelationId,
                EventTriggerOidIndexId,
+               "EVENTTRIGGEROID",
                1,
                {
                        Anum_pg_event_trigger_oid,
@@ -419,8 +447,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {ForeignDataWrapperRelationId,  /* FOREIGNDATAWRAPPERNAME */
+       {ForeignDataWrapperRelationId,
                ForeignDataWrapperNameIndexId,
+               "FOREIGNDATAWRAPPERNAME",
                1,
                {
                        Anum_pg_foreign_data_wrapper_fdwname,
@@ -430,8 +459,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {ForeignDataWrapperRelationId,  /* FOREIGNDATAWRAPPEROID */
+       {ForeignDataWrapperRelationId,
                ForeignDataWrapperOidIndexId,
+               "FOREIGNDATAWRAPPEROID",
                1,
                {
                        Anum_pg_foreign_data_wrapper_oid,
@@ -441,8 +471,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {ForeignServerRelationId,       /* FOREIGNSERVERNAME */
+       {ForeignServerRelationId,
                ForeignServerNameIndexId,
+               "FOREIGNSERVERNAME",
                1,
                {
                        Anum_pg_foreign_server_srvname,
@@ -452,8 +483,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {ForeignServerRelationId,       /* FOREIGNSERVEROID */
+       {ForeignServerRelationId,
                ForeignServerOidIndexId,
+               "FOREIGNSERVEROID",
                1,
                {
                        Anum_pg_foreign_server_oid,
@@ -463,8 +495,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {ForeignTableRelationId,        /* FOREIGNTABLEREL */
+       {ForeignTableRelationId,
                ForeignTableRelidIndexId,
+               "FOREIGNTABLEREL",
                1,
                {
                        Anum_pg_foreign_table_ftrelid,
@@ -474,8 +507,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {IndexRelationId,                       /* INDEXRELID */
+       {IndexRelationId,
                IndexRelidIndexId,
+               "INDEXRELID",
                1,
                {
                        Anum_pg_index_indexrelid,
@@ -485,8 +519,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {LanguageRelationId,            /* LANGNAME */
+       {LanguageRelationId,
                LanguageNameIndexId,
+               "LANGNAME",
                1,
                {
                        Anum_pg_language_lanname,
@@ -496,8 +531,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {LanguageRelationId,            /* LANGOID */
+       {LanguageRelationId,
                LanguageOidIndexId,
+               "LANGOID",
                1,
                {
                        Anum_pg_language_oid,
@@ -507,8 +543,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {NamespaceRelationId,           /* NAMESPACENAME */
+       {NamespaceRelationId,
                NamespaceNameIndexId,
+               "NAMESPACENAME",
                1,
                {
                        Anum_pg_namespace_nspname,
@@ -518,8 +555,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {NamespaceRelationId,           /* NAMESPACEOID */
+       {NamespaceRelationId,
                NamespaceOidIndexId,
+               "NAMESPACEOID",
                1,
                {
                        Anum_pg_namespace_oid,
@@ -529,8 +567,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {OperatorRelationId,            /* OPERNAMENSP */
+       {OperatorRelationId,
                OperatorNameNspIndexId,
+               "OPERNAMENSP",
                4,
                {
                        Anum_pg_operator_oprname,
@@ -540,8 +579,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                256
        },
-       {OperatorRelationId,            /* OPEROID */
+       {OperatorRelationId,
                OperatorOidIndexId,
+               "OPEROID",
                1,
                {
                        Anum_pg_operator_oid,
@@ -551,8 +591,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                32
        },
-       {OperatorFamilyRelationId,      /* OPFAMILYAMNAMENSP */
+       {OperatorFamilyRelationId,
                OpfamilyAmNameNspIndexId,
+               "OPFAMILYAMNAMENSP",
                3,
                {
                        Anum_pg_opfamily_opfmethod,
@@ -562,8 +603,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {OperatorFamilyRelationId,      /* OPFAMILYOID */
+       {OperatorFamilyRelationId,
                OpfamilyOidIndexId,
+               "OPFAMILYOID",
                1,
                {
                        Anum_pg_opfamily_oid,
@@ -573,8 +615,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {PartitionedRelationId,         /* PARTRELID */
+       {PartitionedRelationId,
                PartitionedRelidIndexId,
+               "PARTRELID",
                1,
                {
                        Anum_pg_partitioned_table_partrelid,
@@ -584,8 +627,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                32
        },
-       {ProcedureRelationId,           /* PROCNAMEARGSNSP */
+       {ProcedureRelationId,
                ProcedureNameArgsNspIndexId,
+               "PROCNAMEARGSNSP",
                3,
                {
                        Anum_pg_proc_proname,
@@ -595,8 +639,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                128
        },
-       {ProcedureRelationId,           /* PROCOID */
+       {ProcedureRelationId,
                ProcedureOidIndexId,
+               "PROCOID",
                1,
                {
                        Anum_pg_proc_oid,
@@ -606,8 +651,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                128
        },
-       {PublicationRelationId,         /* PUBLICATIONNAME */
+       {PublicationRelationId,
                PublicationNameIndexId,
+               "PUBLICATIONNAME",
                1,
                {
                        Anum_pg_publication_pubname,
@@ -617,8 +663,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {PublicationRelationId,         /* PUBLICATIONOID */
+       {PublicationRelationId,
                PublicationObjectIndexId,
+               "PUBLICATIONOID",
                1,
                {
                        Anum_pg_publication_oid,
@@ -628,8 +675,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {PublicationRelRelationId,      /* PUBLICATIONREL */
+       {PublicationRelRelationId,
                PublicationRelObjectIndexId,
+               "PUBLICATIONREL",
                1,
                {
                        Anum_pg_publication_rel_oid,
@@ -639,8 +687,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {PublicationRelRelationId,      /* PUBLICATIONRELMAP */
+       {PublicationRelRelationId,
                PublicationRelPrrelidPrpubidIndexId,
+               "PUBLICATIONRELMAP",
                2,
                {
                        Anum_pg_publication_rel_prrelid,
@@ -650,8 +699,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {RangeRelationId,                       /* RANGEMULTIRANGE */
+       {RangeRelationId,
                RangeMultirangeTypidIndexId,
+               "RANGEMULTIRANGE",
                1,
                {
                        Anum_pg_range_rngmultitypid,
@@ -662,8 +712,9 @@ static const struct cachedesc cacheinfo[] = {
                4
        },
 
-       {RangeRelationId,                       /* RANGETYPE */
+       {RangeRelationId,
                RangeTypidIndexId,
+               "RANGETYPE",
                1,
                {
                        Anum_pg_range_rngtypid,
@@ -673,8 +724,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {RelationRelationId,            /* RELNAMENSP */
+       {RelationRelationId,
                ClassNameNspIndexId,
+               "RELNAMENSP",
                2,
                {
                        Anum_pg_class_relname,
@@ -684,8 +736,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                128
        },
-       {RelationRelationId,            /* RELOID */
+       {RelationRelationId,
                ClassOidIndexId,
+               "RELOID",
                1,
                {
                        Anum_pg_class_oid,
@@ -695,8 +748,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                128
        },
-       {ReplicationOriginRelationId,   /* REPLORIGIDENT */
+       {ReplicationOriginRelationId,
                ReplicationOriginIdentIndex,
+               "REPLORIGIDENT",
                1,
                {
                        Anum_pg_replication_origin_roident,
@@ -706,8 +760,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {ReplicationOriginRelationId,   /* REPLORIGNAME */
+       {ReplicationOriginRelationId,
                ReplicationOriginNameIndex,
+               "REPLORIGNAME",
                1,
                {
                        Anum_pg_replication_origin_roname,
@@ -717,8 +772,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {RewriteRelationId,                     /* RULERELNAME */
+       {RewriteRelationId,
                RewriteRelRulenameIndexId,
+               "RULERELNAME",
                2,
                {
                        Anum_pg_rewrite_ev_class,
@@ -728,8 +784,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                8
        },
-       {SequenceRelationId,            /* SEQRELID */
+       {SequenceRelationId,
                SequenceRelidIndexId,
+               "SEQRELID",
                1,
                {
                        Anum_pg_sequence_seqrelid,
@@ -739,8 +796,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                32
        },
-       {StatisticExtDataRelationId,    /* STATEXTDATASTXOID */
+       {StatisticExtDataRelationId,
                StatisticExtDataStxoidIndexId,
+               "STATEXTDATASTXOID",
                1,
                {
                        Anum_pg_statistic_ext_data_stxoid,
@@ -750,8 +808,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {StatisticExtRelationId,        /* STATEXTNAMENSP */
+       {StatisticExtRelationId,
                StatisticExtNameIndexId,
+               "STATEXTNAMENSP",
                2,
                {
                        Anum_pg_statistic_ext_stxname,
@@ -761,8 +820,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {StatisticExtRelationId,        /* STATEXTOID */
+       {StatisticExtRelationId,
                StatisticExtOidIndexId,
+               "STATEXTOID",
                1,
                {
                        Anum_pg_statistic_ext_oid,
@@ -772,8 +832,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {StatisticRelationId,           /* STATRELATTINH */
+       {StatisticRelationId,
                StatisticRelidAttnumInhIndexId,
+               "STATRELATTINH",
                3,
                {
                        Anum_pg_statistic_starelid,
@@ -783,8 +844,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                128
        },
-       {SubscriptionRelationId,        /* SUBSCRIPTIONNAME */
+       {SubscriptionRelationId,
                SubscriptionNameIndexId,
+               "SUBSCRIPTIONNAME",
                2,
                {
                        Anum_pg_subscription_subdbid,
@@ -794,8 +856,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {SubscriptionRelationId,        /* SUBSCRIPTIONOID */
+       {SubscriptionRelationId,
                SubscriptionObjectIndexId,
+               "SUBSCRIPTIONOID",
                1,
                {
                        Anum_pg_subscription_oid,
@@ -805,8 +868,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {SubscriptionRelRelationId, /* SUBSCRIPTIONRELMAP */
+       {SubscriptionRelRelationId,
                SubscriptionRelSrrelidSrsubidIndexId,
+               "SUBSCRIPTIONRELMAP",
                2,
                {
                        Anum_pg_subscription_rel_srrelid,
@@ -816,8 +880,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {TableSpaceRelationId,          /* TABLESPACEOID */
+       {TableSpaceRelationId,
                TablespaceOidIndexId,
+               "TABLESPACEOID",
                1,
                {
                        Anum_pg_tablespace_oid,
@@ -827,8 +892,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                4
        },
-       {TransformRelationId,           /* TRFOID */
+       {TransformRelationId,
                TransformOidIndexId,
+               "TRFOID",
                1,
                {
                        Anum_pg_transform_oid,
@@ -838,8 +904,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {TransformRelationId,           /* TRFTYPELANG */
+       {TransformRelationId,
                TransformTypeLangIndexId,
+               "TRFTYPELANG",
                2,
                {
                        Anum_pg_transform_trftype,
@@ -849,8 +916,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                16
        },
-       {TSConfigMapRelationId,         /* TSCONFIGMAP */
+       {TSConfigMapRelationId,
                TSConfigMapIndexId,
+               "TSCONFIGMAP",
                3,
                {
                        Anum_pg_ts_config_map_mapcfg,
@@ -860,8 +928,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSConfigRelationId,            /* TSCONFIGNAMENSP */
+       {TSConfigRelationId,
                TSConfigNameNspIndexId,
+               "TSCONFIGNAMENSP",
                2,
                {
                        Anum_pg_ts_config_cfgname,
@@ -871,8 +940,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSConfigRelationId,            /* TSCONFIGOID */
+       {TSConfigRelationId,
                TSConfigOidIndexId,
+               "TSCONFIGOID",
                1,
                {
                        Anum_pg_ts_config_oid,
@@ -882,8 +952,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSDictionaryRelationId,        /* TSDICTNAMENSP */
+       {TSDictionaryRelationId,
                TSDictionaryNameNspIndexId,
+               "TSDICTNAMENSP",
                2,
                {
                        Anum_pg_ts_dict_dictname,
@@ -893,8 +964,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSDictionaryRelationId,        /* TSDICTOID */
+       {TSDictionaryRelationId,
                TSDictionaryOidIndexId,
+               "TSDICTOID",
                1,
                {
                        Anum_pg_ts_dict_oid,
@@ -904,8 +976,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSParserRelationId,            /* TSPARSERNAMENSP */
+       {TSParserRelationId,
                TSParserNameNspIndexId,
+               "TSPARSERNAMENSP",
                2,
                {
                        Anum_pg_ts_parser_prsname,
@@ -915,8 +988,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSParserRelationId,            /* TSPARSEROID */
+       {TSParserRelationId,
                TSParserOidIndexId,
+               "TSPARSEROID",
                1,
                {
                        Anum_pg_ts_parser_oid,
@@ -926,8 +1000,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSTemplateRelationId,          /* TSTEMPLATENAMENSP */
+       {TSTemplateRelationId,
                TSTemplateNameNspIndexId,
+               "TSTEMPLATENAMENSP",
                2,
                {
                        Anum_pg_ts_template_tmplname,
@@ -937,8 +1012,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TSTemplateRelationId,          /* TSTEMPLATEOID */
+       {TSTemplateRelationId,
                TSTemplateOidIndexId,
+               "TSTEMPLATEOID",
                1,
                {
                        Anum_pg_ts_template_oid,
@@ -948,8 +1024,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {TypeRelationId,                        /* TYPENAMENSP */
+       {TypeRelationId,
                TypeNameNspIndexId,
+               "TYPENAMENSP",
                2,
                {
                        Anum_pg_type_typname,
@@ -959,8 +1036,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {TypeRelationId,                        /* TYPEOID */
+       {TypeRelationId,
                TypeOidIndexId,
+               "TYPEOID",
                1,
                {
                        Anum_pg_type_oid,
@@ -970,8 +1048,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                64
        },
-       {UserMappingRelationId,         /* USERMAPPINGOID */
+       {UserMappingRelationId,
                UserMappingOidIndexId,
+               "USERMAPPINGOID",
                1,
                {
                        Anum_pg_user_mapping_oid,
@@ -981,8 +1060,9 @@ static const struct cachedesc cacheinfo[] = {
                },
                2
        },
-       {UserMappingRelationId,         /* USERMAPPINGUSERSERVER */
+       {UserMappingRelationId,
                UserMappingUserServerIndexId,
+               "USERMAPPINGUSERSERVER",
                2,
                {
                        Anum_pg_user_mapping_umuser,
@@ -1034,6 +1114,7 @@ InitCatalogCache(void)
                SysCache[cacheId] = InitCatCache(cacheId,
                                                                                
 cacheinfo[cacheId].reloid,
                                                                                
 cacheinfo[cacheId].indoid,
+                                                                               
 cacheinfo[cacheId].cacheid,
                                                                                
 cacheinfo[cacheId].nkeys,
                                                                                
 cacheinfo[cacheId].key,
                                                                                
 cacheinfo[cacheId].nbuckets);
diff --git a/src/include/utils/catcache.h b/src/include/utils/catcache.h
index a32fea2f11..d73cd1909e 100644
--- a/src/include/utils/catcache.h
+++ b/src/include/utils/catcache.h
@@ -192,7 +192,7 @@ extern PGDLLIMPORT MemoryContext CacheMemoryContext;
 
 extern void CreateCacheMemoryContext(void);
 
-extern CatCache *InitCatCache(int id, Oid reloid, Oid indexoid,
+extern CatCache *InitCatCache(int id, Oid reloid, Oid indexoid, char* idstr,
                                                          int nkeys, const int 
*key,
                                                          int nbuckets);
 extern void InitCatCachePhase2(CatCache *cache, bool touch_index);
diff --git a/src/backend/utils/cache/catcache.c 
b/src/backend/utils/cache/catcache.c
index ffc7fac63b..116db43f7c 100644
--- a/src/backend/utils/cache/catcache.c
+++ b/src/backend/utils/cache/catcache.c
@@ -771,6 +771,7 @@ InitCatCache(int id,
        CatCache   *cp;
        MemoryContext oldcxt;
        MemoryContext mycxt;
+       char            buf[32];
        size_t          sz;
        int                     i;
 
@@ -799,8 +800,8 @@ InitCatCache(int id,
 
        oldcxt = MemoryContextSwitchTo(mycxt);
 
-       /* we can use idstr without copying since the caller gave us a const */
-       MemoryContextSetIdentifier(mycxt, idstr);
+       snprintf(buf, 32, "%s[%d]", idstr, id);
+       MemoryContextSetIdentifier(mycxt, (const char *) pstrdup(buf));
 
        /*
         * if first time through, initialize the cache group header

Reply via email to