Am Montag, 10. Dezember 2007 schrieb Alvaro Herrera:
> Peter Eisentraut wrote:
> > I figured it would make sense if pgarch.c used the same mechanism that
> > postmaster.c uses to report the various variants of regular and signal
> > exits.
>
> Hmm. Getting rid of the "(PID 0)" is going to be a mess enough for
> translations that I think it is worth pgarch.c having its own routine
> for this. Furthermore I think the detailed archive command should be
> reported in an errdetail() field, which makes it even farther off.
Better patch.
--
Peter Eisentraut
http://developer.postgresql.org/~petere/
diff -cr ../cvs-pgsql/src/backend/postmaster/pgarch.c ./src/backend/postmaster/pgarch.c
*** ../cvs-pgsql/src/backend/postmaster/pgarch.c 2007-11-26 13:29:36.000000000 +0100
--- ./src/backend/postmaster/pgarch.c 2007-12-11 17:10:50.000000000 +0100
***************
*** 474,494 ****
rc = system(xlogarchcmd);
if (rc != 0)
{
! /*
! * If either the shell itself, or a called command, died on a signal,
! * abort the archiver. We do this because system() ignores SIGINT and
! * SIGQUIT while waiting; so a signal is very likely something that
! * should have interrupted us too. If we overreact it's no big deal,
! * the postmaster will just start the archiver again.
! *
! * Per the Single Unix Spec, shells report exit status > 128 when a
! * called command died on a signal.
! */
! bool signaled = WIFSIGNALED(rc) || WEXITSTATUS(rc) > 128;
!
! ereport(signaled ? FATAL : LOG,
! (errmsg("archive command \"%s\" failed: return code %d",
! xlogarchcmd, rc)));
return false;
}
--- 474,514 ----
rc = system(xlogarchcmd);
if (rc != 0)
{
! if (WIFEXITED(rc))
! {
! ereport(LOG,
! (errmsg("archive command failed with exit code %d", WEXITSTATUS(rc)),
! errdetail("The archive command was \"%s\".", xlogarchcmd)));
! }
! else if (WIFSIGNALED(rc))
! {
! /*
! * If either the shell itself, or a called command, died
! * on a signal, abort the archiver. We do this because
! * system() ignores SIGINT and SIGQUIT while waiting; so a
! * signal is very likely something that should have
! * interrupted us too. If we overreact it's no big deal,
! * the postmaster will just start the archiver again.
! */
! ereport(FATAL, (
! #if defined(WIN32)
! errmsg("archive command was terminated by exception 0x%X", WTERMSIG(rc)),
! errhint("See C include file \"ntstatus.h\" for a description of the hexadecimal value."),
! #elif defined(HAVE_DECL_SYS_SIGLIST) && HAVE_DECL_SYS_SIGLIST
! errmsg("archive command was terminated by signal %d: %s",
! WTERMSIG(rc),
! WTERMSIG(rc) < NSIG ? sys_siglist[WTERMSIG(rc)] : "(unknown)"),
! #else
! errmsg("archive command was terminated by signal %d", WTERMSIG(exitstatus)),
! #endif
! errdetail("The archive command was \"%s\".", xlogarchcmd)));
! }
! else
! {
! ereport(LOG,
! (errmsg("archive command exited with unrecognized status %d", rc),
! errdetail("The archive command was \"%s\".", xlogarchcmd)));
! }
return false;
}
---------------------------(end of broadcast)---------------------------
TIP 9: In versions below 8.0, the planner will ignore your desire to
choose an index scan if your joining column's datatypes do not
match