Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: christoph.berg@credativ.de
Cc: pgsql-bugs@lists.postgresql.org
Date: 2022-05-31T02:39:27Z
Lists: pgsql-bugs
At Mon, 30 May 2022 17:18:28 +0200, Christoph Berg <christoph.berg@credativ.de> wrote in
> Re: PG Bug reporting form
> > The problem is not limited to \copy; \i has the same problem.
> > A workaround is to drop -1, and use an explicit transaction in the script.
>
> \connect correctly aborts the whole operation.
>
> I would suggest that all client-side errors should be handled as fatal
> when both --single-transaction and -vON_ERROR_STOP=1 are in effect.
The code looks like just a thinko that "COMMIT" works fine even if the
given commands have ended in failure. But actually it doesn't for
client-side failure.
diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c
index ddff903915..2261f78f81 100644
--- a/src/bin/psql/startup.c
+++ b/src/bin/psql/startup.c
@@ -426,7 +426,9 @@ main(int argc, char *argv[])
if (options.single_txn)
{
- if ((res = PSQLexec("COMMIT")) == NULL)
+ res = PSQLexec(successResult == EXIT_SUCCESS ?
+ "COMMIT" : "ROLLBACK");
+ if (res == NULL)
{
if (pset.on_error_stop)
{
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
Commits
-
Tweak behavior of psql --single-transaction depending on ON_ERROR_STOP
- a3ff08e0b08d 15.0 landed
-
Doc: remove a04ccf6df from release notes, now that it's reverted.
- 18f66a1a91bd 14.4 landed
-
Revert "Fix psql's single transaction mode on client-side errors with -c/-f switches".
- f25b5519c99a 14.4 landed
- db713aa7fcbe 10.22 landed
- aaa88d3828c3 11.17 landed
- 3f7f06738529 13.8 landed
- 030da9b6fd52 12.12 landed
-
Fix psql's single transaction mode on client-side errors with -c/-f switches
- c3df4d53ca4a 10.22 landed
- b0bd9327dd74 11.17 landed
- 0a1e4f0ca788 12.12 landed
- b364cfdfaf6b 13.8 landed
- a04ccf6dfb4a 14.4 landed
- 157f8739ad18 15.0 landed