From: | Kyotaro Horiguchi <horikyota(dot)ntt(at)gmail(dot)com> |
---|---|
To: | christoph(dot)berg(at)credativ(dot)de |
Cc: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Subject: | Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error |
Date: | 2022-05-31 02:39:27 |
Message-ID: | 20220531.113927.640026319524742851.horikyota.ntt@gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
At Mon, 30 May 2022 17:18:28 +0200, Christoph Berg <christoph(dot)berg(at)credativ(dot)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
From | Date | Subject | |
---|---|---|---|
Next Message | Michael Paquier | 2022-05-31 04:25:17 | Re: BUG #17485: Records missing from Primary Key index when doing REINDEX INDEX CONCURRENTLY |
Previous Message | Michael Paquier | 2022-05-31 01:45:04 | Re: BUG #17485: Records missing from Primary Key index when doing REINDEX INDEX CONCURRENTLY |