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
