diff --git a/src/backend/catalog/namespace.c b/src/backend/catalog/namespace.c index f2480509e80..83a1c659b46 100644 --- a/src/backend/catalog/namespace.c +++ b/src/backend/catalog/namespace.c @@ -4232,8 +4243,15 @@ preprocessNamespacePath(const char *searchPath, Oid roleid, } else if (strcmp(curname, "pg_temp") == 0) { - /* pg_temp --- substitute temp namespace, if any */ - if (OidIsValid(myTempNamespace)) + /* + * pg_temp --- substitute temp namespace, if any. It may have + * been dropped while this session was using it; then treat it as + * not created yet, so that creating an object through the search + * path goes through AccessTempTableNamespace() and gets a new one. + */ + if (OidIsValid(myTempNamespace) && + SearchSysCacheExists1(NAMESPACEOID, + ObjectIdGetDatum(myTempNamespace))) oidlist = lappend_oid(oidlist, myTempNamespace); else {