I am writing a shell script which makes calls to psql using 2 forms... one is by command (-c), the other is by file (-f).

e.g. psql -c "create table foo (bar integer)"

psql -f foobar.sql

One difference between these forms is that a call by command (-c) returns a non-zero exit code if an error is encountered, while a call by file (-f) always seems to return zero.

I'm wondering if there is a workaround for this behaviour? (i.e. return non-zero if an error occurs while executing a file).



You can use below statement.

psql -v ON_ERROR_STOP=1 -f foobar.sql

This will return the correct return code even foobar.sql file doesn't enable ON_ERROR_STOP at the top of the file.


I found out how to resolve this.

I need to enable ON_ERROR_STOP at the top of the file.


\set ON_ERROR_STOP true
  • +1 for looking at the manpage :) – serverhorror Jun 9 '09 at 18:54
  • +1 for the best solution because it allows me to set the variable in the script, so I can trust it always runs correctly and don't have to worry about runtime context. – Brandon Dec 27 '14 at 4:48

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.