Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error
От | Kyotaro Horiguchi |
---|---|
Тема | Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error |
Дата | |
Msg-id | 20220531.113927.640026319524742851.horikyota.ntt@gmail.com обсуждение исходный текст |
Ответ на | Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error (Christoph Berg <christoph.berg@credativ.de>) |
Ответы |
Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error
|
Список | 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
В списке pgsql-bugs по дате отправления: