po 27. 12. 2021 v 17:10 odesÃlatel Justin Pryzby <pry...@telsasoft.com> napsal:
> On Mon, Dec 06, 2021 at 09:08:56AM -0600, Justin Pryzby wrote: > > I raised this issue a few years ago. > > > https://www.postgresql.org/message-id/20181217175841.GS13019%40telsasoft.com > > > > |[pryzbyj@database ~]$ psql -v VERBOSITY=terse ts -xtc 'ONE' -c "SELECT > 'TWO'"; echo "exit status $?" > > |ERROR: syntax error at or near "ONE" at character 1 > > |?column? | TWO > > | > > |exit status 0 > > > > The documentation doen't say what the exit status should be in this case: > > | psql returns 0 to the shell if it finished normally, 1 if a fatal > error of its own occurs (e.g., out of memory, file not found), 2 if the > connection to the server went bad and the session was not interactive, and > 3 if an error occurred in a script and the variable ON_ERROR_STOP was set. > > > > It returns 1 if the final command fails, even though it's not a "fatal > error" > > (it would've happily kept running more commands). > > > > | x=`some_command_that_fails` > > | rm -fr "$x/$y # removes all your data > > > > | psql -c "begin; C REATE TABLE newtable(LIKE oldtable) INSERT INTO > newtable SELECT * FROM oldtable; commit" -c "DROP TABLE oldtable > > | psql -v VERBOSITY=terse ts -xtc '0CREATE TABLE newtbl(i int)' -c > 'INSERT INTO newtbl SELECT * FROM tbl' -c 'DROP TABLE IF EXISTS tbl' -c > 'ALTER TABLE newtbl RENAME TO tbl'; echo ret=$? > > > > David J suggested to change the default value of ON_ERROR_STOP. The exit > > status in the non-default case would have to be documented. That's one > > solution, and allows the old behavior if anybody wants it. That > probably does > > what most people want, too. This is more likely to expose a real > problem that > > someone would have missed than to break a legitimate use. That doesn't > appear > > to break regression tests at all. > > I was wrong - the regression tests specifically exercise failure cases, so > the > scripts must continue after errors. > > I think the current behavior of the regression test SQL scripts is exactly > the > opposite of what's desirable for almost all other scripts. The attached > makes > ON_ERROR_STOP the default, and runs the regression tests with > ON_ERROR_STOP=0. > > Is it viable to consider changing this ? > I have not any problems with the proposed feature, and I agree so proposed behavior is more practical for users. Unfortunately, it breaks a lot of applications' regress tests, but it can be fixed easily, and it is better to do it quickly without more complications. Regards Pavel