diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/catalog/namespace.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index c009e9c241a..ac30f77f024 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -3868,12 +3868,31 @@ RemoveTempRelationsCallback(int code, Datum arg) /* * Remove all temp tables from the temporary namespace. + * + * If we haven't set up one yet, but one exists from a previous crashed + * backend, clean that one; but only do this once in a session's life. */ void ResetTempTableNamespace(void) { + static bool TempNamespaceCleaned = false; + if (OidIsValid(myTempNamespace)) RemoveTempRelations(myTempNamespace); + else if (MyBackendId != InvalidBackendId && !RecoveryInProgress() && + !TempNamespaceCleaned) + { + char namespaceName[NAMEDATALEN]; + Oid namespaceId; + + snprintf(namespaceName, sizeof(namespaceName), "pg_temp_%d", + MyBackendId); + namespaceId = get_namespace_oid(namespaceName, true); + if (OidIsValid(namespaceId)) + RemoveTempRelations(namespaceId); + } + + TempNamespaceCleaned = true; } |