On 1/16/20 12:26 PM, Andres Freund wrote:
Hi,

On 2020-01-16 14:20:28 -0500, Tom Lane wrote:
David Steele <da...@pgmasters.net> writes:
The way we handle this in pgBackRest is to put a TRY ... CATCH block in
main() to log and exit on any uncaught THROW.  That seems like a
reasonable way to start here.  Without memory contexts that almost
certainly will mean memory leaks but I'm not sure how much that matters
if the action is to exit immediately.

If that's the expectation, we might as well replace backend ereport(ERROR)
with something that just prints a message and does exit(1).

Well, the process might still want to do some cleanup of half-finished
work. You'd not need to be resistant against memory leaks to do so, if
followed by an exit. Obviously you can also do all the necessarily
cleanup from within the ereport(ERROR) itself, but that doesn't seem
appealing to me (not composable, harder to reuse for other programs,
etc).

In pgBackRest we have a default handler that just logs the message to stderr and exits (though we consider it a coding error if it gets called). Seems like we could do the same here. Default message and exit if no handler, but optionally allow a handler (which could RETHROW to get to the default handler afterwards).

It seems like we've been wanting a front end version of ereport() for a while so I'll take a look at that and see what it involves.

Regards,
--
-David
da...@pgmasters.net


Reply via email to