diff options
Diffstat (limited to 'src/backend/postmaster/postmaster.c')
-rw-r--r-- | src/backend/postmaster/postmaster.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index dd7493cf9dd..5476975f765 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -2777,6 +2777,13 @@ HandleChildCrash(int pid, int exitstatus, const char *procname) static void LogChildExit(int lev, const char *procname, int pid, int exitstatus) { + char activity_buffer[1024]; /* default track_activity_query_size */ + const char *activity; + + activity = pgstat_get_crashed_backend_activity(pid, + activity_buffer, + sizeof(activity_buffer)); + if (WIFEXITED(exitstatus)) ereport(lev, @@ -2784,7 +2791,8 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus) translator: %s is a noun phrase describing a child process, such as "server process" */ (errmsg("%s (PID %d) exited with exit code %d", - procname, pid, WEXITSTATUS(exitstatus)))); + procname, pid, WEXITSTATUS(exitstatus)), + errdetail("Running query: %s", activity))); else if (WIFSIGNALED(exitstatus)) #if defined(WIN32) ereport(lev, @@ -2794,7 +2802,8 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus) "server process" */ (errmsg("%s (PID %d) was terminated by exception 0x%X", procname, pid, WTERMSIG(exitstatus)), - errhint("See C include file \"ntstatus.h\" for a description of the hexadecimal value."))); + errhint("See C include file \"ntstatus.h\" for a description of the hexadecimal value."), + errdetail("Running query: %s", activity))); #elif defined(HAVE_DECL_SYS_SIGLIST) && HAVE_DECL_SYS_SIGLIST ereport(lev, @@ -2804,7 +2813,8 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus) (errmsg("%s (PID %d) was terminated by signal %d: %s", procname, pid, WTERMSIG(exitstatus), WTERMSIG(exitstatus) < NSIG ? - sys_siglist[WTERMSIG(exitstatus)] : "(unknown)"))); + sys_siglist[WTERMSIG(exitstatus)] : "(unknown)"), + errdetail("Running query: %s", activity))); #else ereport(lev, @@ -2812,7 +2822,8 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus) translator: %s is a noun phrase describing a child process, such as "server process" */ (errmsg("%s (PID %d) was terminated by signal %d", - procname, pid, WTERMSIG(exitstatus)))); + procname, pid, WTERMSIG(exitstatus)), + errdetail("Running query: %s", activity))); #endif else ereport(lev, @@ -2821,7 +2832,8 @@ LogChildExit(int lev, const char *procname, int pid, int exitstatus) translator: %s is a noun phrase describing a child process, such as "server process" */ (errmsg("%s (PID %d) exited with unrecognized status %d", - procname, pid, exitstatus))); + procname, pid, exitstatus), + errdetail("Running query: %s", activity))); } /* |