Commit
a3d2b1bbe904b0ca8d9fdde20f25295ff3e21f79 neglected to
initialize the type_id field of the synthesized type cache entry, so
it would make a new one on every call.
Also, better use the per-function memory context for this; otherwise
it leaks memory.
Discussion: https://www.postgresql.org/message-id/flat/17158-
8a2ba823982537a4%40postgresql.org
MemoryContext oldcontext;
TypeCacheEntry *record_typentry;
- oldcontext = MemoryContextSwitchTo(CacheMemoryContext);
+ oldcontext = MemoryContextSwitchTo(fcinfo->flinfo->fn_mcxt);
/*
* Make fake type cache entry structure. Note that we can't just
* modify typentry, since that points directly into the type cache.
*/
- record_typentry = palloc(sizeof(*record_typentry));
+ record_typentry = palloc0(sizeof(*record_typentry));
+ record_typentry->type_id = element_type;
/* fill in what we need below */
record_typentry->typlen = typentry->typlen;