Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error
От | Michael Paquier |
---|---|
Тема | Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error |
Дата | |
Msg-id | YphNHbOkg22H7d52@paquier.xyz обсуждение исходный текст |
Ответ на | Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error (Kyotaro Horiguchi <horikyota.ntt@gmail.com>) |
Ответы |
Re: BUG #17504: psql --single-transaction -vON_ERROR_STOP=1 still commits after client-side error
|
Список | pgsql-bugs |
On Tue, May 31, 2022 at 11:39:27AM +0900, Kyotaro Horiguchi wrote: > 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) > { Yeah, it seems a bit strange to commit the changes if an error happens on the client side, and the docs are a bit blurry about that because it has never been considered, I guess. This would not happen with a failure in the backend as COMMIT would just map to a ROLLBACK automatically. The change that you are sending would enforce this policy as Christoph would like. Some tests would be nice to check such behaviors, say in 001_basic.pl, but we also need to be careful when sending down queries with psql expected to fail because of SIGPIPE (c757a3d, 6d41dd0). The docs need a refresh, they mention now that COMMIT is sent after the last command but that would not be the case anymore with this patch if there is a client-side error. -- Michael
Вложения
В списке pgsql-bugs по дате отправления: