Re: Rollback on include error in psql - Mailing list pgsql-general

From David Johnston
Subject Re: Rollback on include error in psql
Date
Msg-id CAKFQuwZmNdxL9s1CLjm9-akPyN2u8A-QCA0nbAnYn91473ZnnQ@mail.gmail.com
Whole thread Raw
In response to Re: Rollback on include error in psql  (David Johnston <david.g.johnston@gmail.com>)
List pgsql-general
On Mon, Dec 29, 2014 at 9:49 AM, David Johnston <david.g.johnston@gmail.com> wrote:
On Mon, Dec 29, 2014 at 9:39 AM, Adrian Klaver <adrian.klaver@aklaver.com> wrote:
On 12/29/2014 07:59 AM, David Johnston wrote:

Anyway, the third undocumented bug is that --single-transactions gets to
send its COMMIT even if ON_ERROR_STOP​
​takes hold before the end of the script.  I imagined it such that only
if every statement in the "-f <script>" was called would the COMMIT be
issued - thus the error_stop would supercede and leave the session
uncommitted and by default rolledback.

Not seeing the bug. --single-transaction wraps the entire script in BEGIN/COMMIT, ON_ERROR_STOP stops 'processing' the command, nothing in there about stopping transaction or rollback. So the failed \i stops the script from processing anything after that and the session goes directly to the COMMIT. If you want to deal with transactions there is ON_ERROR_ROLLBACK. Though I did find something interesting about that, which will subject of another post.


​Then --single-transaction has nothing to do with the script file at-all.  It should be documented as issuing a BEGIN at session connect and a COMMIT just before session disconnect - regardless of whether the named script executes to completion, which can happen if it is combined with ON_ERROR_STOP.



​FWIW​

​The way this is written currently I am imagining something like this happens:

cat "BEGIN;" filename "COMMIT;" > script_to_execute​

\i script_to_execute

David J.

pgsql-general by date:

Previous
From: Adrian Klaver
Date:
Subject: ON_ERROR_ROLLBACK
Next
From: Ronald Peterson
Date:
Subject: extra function calls from query returning composite type