>From e0b5bae6323f22494ba8aad79a50a8fd69a0d21c Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Fri, 16 May 2014 22:34:47 +0200
Subject: [PATCH] Support showing the database in log messages originating in a
 background process.

---
 src/backend/utils/error/elog.c    | 11 +++++++++--
 src/backend/utils/init/globals.c  |  1 +
 src/backend/utils/init/postinit.c |  3 +++
 src/include/miscadmin.h           |  1 +
 4 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/backend/utils/error/elog.c b/src/backend/utils/error/elog.c
index 0d92dcd..db6cc43 100644
--- a/src/backend/utils/error/elog.c
+++ b/src/backend/utils/error/elog.c
@@ -2320,9 +2320,14 @@ log_line_prefix(StringInfo buf, ErrorData *edata)
 										   padding > 0 ? padding : -padding);
 				break;
 			case 'd':
-				if (MyProcPort)
+				if (MyProcPort || MyDatabaseName)
 				{
-					const char *dbname = MyProcPort->database_name;
+					const char *dbname;
+
+					if (MyProcPort)
+						dbname = MyProcPort->database_name;
+					else
+						dbname = MyDatabaseName;
 
 					if (dbname == NULL || *dbname == '\0')
 						dbname = _("[unknown]");
@@ -2577,6 +2582,8 @@ write_csvlog(ErrorData *edata)
 	/* database name */
 	if (MyProcPort)
 		appendCSVLiteral(&buf, MyProcPort->database_name);
+	else if (MyDatabaseName)
+		appendCSVLiteral(&buf, MyDatabaseName);
 	appendStringInfoChar(&buf, ',');
 
 	/* Process id  */
diff --git a/src/backend/utils/init/globals.c b/src/backend/utils/init/globals.c
index be74835..46d4cf4 100644
--- a/src/backend/utils/init/globals.c
+++ b/src/backend/utils/init/globals.c
@@ -62,6 +62,7 @@ char		postgres_exec_path[MAXPGPATH];		/* full path to backend */
 BackendId	MyBackendId = InvalidBackendId;
 
 Oid			MyDatabaseId = InvalidOid;
+char	   *MyDatabaseName = NULL;
 
 Oid			MyDatabaseTableSpace = InvalidOid;
 
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index ed936d7..0f5aaa8 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -51,6 +51,7 @@
 #include "utils/acl.h"
 #include "utils/fmgroids.h"
 #include "utils/guc.h"
+#include "utils/memutils.h"
 #include "utils/pg_locale.h"
 #include "utils/portal.h"
 #include "utils/ps_status.h"
@@ -795,6 +796,7 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username,
 		MyDatabaseTableSpace = dbform->dattablespace;
 		/* take database name from the caller, just for paranoia */
 		strlcpy(dbname, in_dbname, sizeof(dbname));
+		MyDatabaseName = MemoryContextStrdup(TopMemoryContext, in_dbname);
 	}
 	else
 	{
@@ -815,6 +817,7 @@ InitPostgres(const char *in_dbname, Oid dboid, const char *username,
 		/* pass the database name back to the caller */
 		if (out_dbname)
 			strcpy(out_dbname, dbname);
+		MyDatabaseName = MemoryContextStrdup(TopMemoryContext, dbname);
 	}
 
 	/* Now we can mark our PGPROC entry with the database ID */
diff --git a/src/include/miscadmin.h b/src/include/miscadmin.h
index c2b786e..91710d3 100644
--- a/src/include/miscadmin.h
+++ b/src/include/miscadmin.h
@@ -165,6 +165,7 @@ extern char postgres_exec_path[];
  * extern BackendId    MyBackendId;
  */
 extern PGDLLIMPORT Oid MyDatabaseId;
+extern PGDLLIMPORT char *MyDatabaseName;
 
 extern PGDLLIMPORT Oid MyDatabaseTableSpace;
 
-- 
2.0.0.rc2.4.g1dc51c6.dirty

