diff --git a/doc/src/sgml/ref/psql-ref.sgml b/doc/src/sgml/ref/psql-ref.sgml index 844d7e27666..7b52ac19002 100644 --- a/doc/src/sgml/ref/psql-ref.sgml +++ b/doc/src/sgml/ref/psql-ref.sgml @@ -580,8 +580,10 @@ EOF psql to issue a BEGIN command before the first such option and a COMMIT command after the last one, thereby wrapping all the commands into a single - transaction. This ensures that either all the commands complete - successfully, or no changes are applied. + transaction. If any of the commands fails, a + ROLLBACK command is sent instead. This ensures that + either all the commands complete successfully, or no changes are + applied. diff --git a/src/bin/psql/startup.c b/src/bin/psql/startup.c index 260b4ea55cd..36e9432fc67 100644 --- a/src/bin/psql/startup.c +++ b/src/bin/psql/startup.c @@ -371,7 +371,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) {