Check return status of psql command in unix shell scripting
psql
return code is documented as:
EXIT STATUS
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.
You probably just want to use ON_ERROR_STOP.
Failure getting tested and reported to the shell:
$ psql -d test -v "ON_ERROR_STOP=1" <<EOFselect error;select 'OK';EOFERROR: column "error" does not existLINE 1: select error;$ echo $?3
Failure getting ignored and not reported to the shell:
$ psql -d test <<EOFselect error;select 'OK';EOFERROR: column "error" does not existLINE 1: select error; ^ ?column? ---------- OK(1 row)$ echo $?0
As mentioned here, you can also add this line at the top of your SQL file/script:
\set ON_ERROR_STOP true