diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index f269168401..dcd6e3b01c 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -2988,18 +2988,31 @@ get_database_oid(const char *dbname, bool missing_ok) /* * get_database_name - given a database OID, look up the name * - * Returns a palloc'd string, or NULL if no such database. + * Returns NULL if no such database, or if dbid matches MyDatabaseId + * it returns a pointer to a static string, otherwise a palloc'd string. */ char * get_database_name(Oid dbid) { HeapTuple dbtuple; + static char MyDatabaseName[NAMEDATALEN]; + static bool cached = false; char *result; + if (cached && dbid == MyDatabaseId) + return MyDatabaseName; + dbtuple = SearchSysCache1(DATABASEOID, ObjectIdGetDatum(dbid)); if (HeapTupleIsValid(dbtuple)) { - result = pstrdup(NameStr(((Form_pg_database) GETSTRUCT(dbtuple))->datname)); + if (!cached && dbid == MyDatabaseId) + { + strcpy(MyDatabaseName, NameStr(((Form_pg_database) GETSTRUCT(dbtuple))->datname)); + cached = true; + result = MyDatabaseName; + } + else + result = pstrdup(NameStr(((Form_pg_database) GETSTRUCT(dbtuple))->datname)); ReleaseSysCache(dbtuple); } else