diff --git a/src/backend/columnar/columnar_tableam.c b/src/backend/columnar/columnar_tableam.c index f830f3089..05ef93c3e 100644 --- a/src/backend/columnar/columnar_tableam.c +++ b/src/backend/columnar/columnar_tableam.c @@ -2874,7 +2874,7 @@ InstalledExtensionVersionColumnar(void) } - installedExtensionVersion = text_to_cstring(DatumGetTextPP(installedVersion)); + installedExtensionVersion = text_to_cstring(DatumGetTextPCopy(installedVersion)); } else { diff --git a/src/backend/distributed/commands/domain.c b/src/backend/distributed/commands/domain.c index c75af0024..bc9bb4872 100644 --- a/src/backend/distributed/commands/domain.c +++ b/src/backend/distributed/commands/domain.c @@ -175,7 +175,7 @@ RecreateDomainStmt(Oid domainOid) * * There is no supported way to go from a cooked expression to a raw expression. */ - constraint->cooked_expr = TextDatumGetCString(conbin); + constraint->cooked_expr = text_to_cstring(DatumGetTextPCopy(conbin)); stmt->constraints = lappend(stmt->constraints, constraint); } diff --git a/src/backend/distributed/commands/role.c b/src/backend/distributed/commands/role.c index af0a3a856..f7fb6852f 100644 --- a/src/backend/distributed/commands/role.c +++ b/src/backend/distributed/commands/role.c @@ -337,6 +337,7 @@ ExtractEncryptedPassword(Oid roleOid) Datum passwordDatum = heap_getattr(tuple, Anum_pg_authid_rolpassword, pgAuthIdDescription, &isNull); + char *passwordCstring = text_to_cstring(DatumGetTextPCopy(passwordDatum)); table_close(pgAuthId, AccessShareLock); ReleaseSysCache(tuple); @@ -346,7 +347,7 @@ ExtractEncryptedPassword(Oid roleOid) return NULL; } - return pstrdup(TextDatumGetCString(passwordDatum)); + return pstrdup(passwordCstring); } @@ -398,7 +399,7 @@ GenerateAlterRoleSetIfExistsCommandList(HeapTuple tuple, */ for (i = 0; i < nconfigs; i++) { - char *config = TextDatumGetCString(configs[i]); + char *config = text_to_cstring(DatumGetTextPCopy(configs[i])); stmt->setstmt = MakeVariableSetStmt(config); commandList = lappend(commandList, (void *) CreateAlterRoleSetIfExistsCommand(stmt)); diff --git a/src/backend/distributed/commands/text_search.c b/src/backend/distributed/commands/text_search.c index 05319324d..688b56774 100644 --- a/src/backend/distributed/commands/text_search.c +++ b/src/backend/distributed/commands/text_search.c @@ -207,6 +207,7 @@ GetTextSearchDictionaryInitOptions(HeapTuple tup, Form_pg_ts_dict dict) List *initOptionDefElemList = NIL; if (!isnull) { + /* TODO: might need copying */ initOptionDefElemList = deserialize_deflist(dictinitoption); } diff --git a/src/backend/distributed/deparser/citus_ruleutils.c b/src/backend/distributed/deparser/citus_ruleutils.c index ff8da5991..13f8ac90b 100644 --- a/src/backend/distributed/deparser/citus_ruleutils.c +++ b/src/backend/distributed/deparser/citus_ruleutils.c @@ -152,7 +152,7 @@ get_extension_version(Oid extensionId) RelationGetDescr(relation), &isNull); if (!isNull) { - versionName = text_to_cstring(DatumGetTextPP(versionDatum)); + versionName = text_to_cstring(DatumGetTextPCopy(versionDatum)); } } diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index 26371b45a..d2fddafcf 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -70,6 +70,7 @@ #include "utils/datum.h" #include "utils/elog.h" #include "utils/hsearch.h" +#include "utils/jsonb.h" #if PG_VERSION_NUM >= PG_VERSION_13 #include "common/hashfn.h" #endif @@ -2276,7 +2277,7 @@ InstalledExtensionVersion(void) MemoryContext oldMemoryContext = MemoryContextSwitchTo( MetadataCacheMemoryContext); - installedExtensionVersion = text_to_cstring(DatumGetTextPP(installedVersion)); + installedExtensionVersion = text_to_cstring(DatumGetTextPCopy(installedVersion)); MemoryContextSwitchTo(oldMemoryContext); } @@ -4910,6 +4911,10 @@ DistNodeMetadata(void) "could not find any entries in pg_dist_metadata"))); } + /* copy the jsonb result before closing the table */ + /* since that memory can be freed */ + metadata = JsonbPGetDatum(DatumGetJsonbPCopy(metadata)); + systable_endscan(scanDescriptor); table_close(pgDistNodeMetadata, AccessShareLock); diff --git a/src/backend/distributed/planner/multi_explain.c b/src/backend/distributed/planner/multi_explain.c index a807085af..2c15b1101 100644 --- a/src/backend/distributed/planner/multi_explain.c +++ b/src/backend/distributed/planner/multi_explain.c @@ -1286,6 +1286,7 @@ ExplainAnalyzeDestPutTuple(TupleDestination *self, Task *task, return; } + /* TODO: might need copying */ char *fetchedExplainAnalyzePlan = TextDatumGetCString(explainAnalyze); double fetchedExplainAnalyzeExecutionDuration = DatumGetFloat8(executionDuration);