Recording exceptions within function (autonomous transactions?) - Mailing list pgsql-general

From Steve Pritchard
Subject Recording exceptions within function (autonomous transactions?)
Date
Msg-id CAF7AqmzzHB_WugArV4JGgUZMu8+PqQzkpCeXuHZsg4oSrt7PrQ@mail.gmail.com
Whole thread Raw
Responses Re: Recording exceptions within function (autonomous transactions?)  (Scott Mead <scottm@openscg.com>)
Re: Recording exceptions within function (autonomous transactions?)  (Adrian Klaver <adrian.klaver@aklaver.com>)
Re: Recording exceptions within function (autonomous transactions?)  (John R Pierce <pierce@hogranch.com>)
List pgsql-general
I am porting several stored procedures from Oracle to Postgres. In the Oracle code, if an exception is thrown within a stored procedure, the exception is caught and details are written to a database table using an autonomous transaction (as the main transaction is rolled back).

As far as I can see from the documentation, Postgres doesn't support autonomous transaction (although there is talk about it at https://wiki.postgresql.org/wiki/Autonomous_subtransactions - is this something that is being discussed for a future release?).

The Postgres functions that I'm writing are batch processes that will be invoked via a scheduler (either cron or pgAgent).

Ideally I'd like to record the exceptions in a database table. If this isn't possible then recording in a log fie would be acceptable, but I'd like to keep this separate from the main postgres log.

Alternatives that I've come up with (none of them very satisfactory):
  • use 'raise' to record in postgres log
  • put the error recording in the client code (as invoked by scheduler) - use BEGIN TRANSACTION to start a new transaction
  • use COPY to output to a file
Can anyone suggest something that would meet my requirements above?

Steve Pritchard
British Trust for Ornithology, UK

pgsql-general by date:

Previous
From: Albe Laurenz
Date:
Subject: Re: Selecting pairs of numbers
Next
From: Scott Mead
Date:
Subject: Re: Recording exceptions within function (autonomous transactions?)