无法从 psql 诱导退出代码 3

Pet*_*ier 6 postgresql psql

文档页面国家(重点煤矿)

退出状态

如果 psql 正常完成,则向 shell 返回 0,如果发生自身的致命错误(例如,内存不足,找不到文件),则返回 1,如果与服务器的连接出现故障并且会话没有交互,则返回3,如果脚本中发生错误并且设置了变量 ON_ERROR_STOP。

但是,我似乎无法诱导退出代码 3。

bash-4.2$ uname -a
Linux mvpg-centos-76.vagrantup.com 3.10.0-957.21.3.el7.x86_64 #1 SMP Tue Jun 18 16:35:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
bash-4.2$ psql --version
psql (PostgreSQL) 10.12
bash-4.2$ psql -v ON_ERROR_STOP=1 -c 'select 1/0;'
ERROR:  division by zero
bash-4.2$ echo $?
1
bash-4.2$ 
Run Code Online (Sandbox Code Playgroud)

我还在 FreeBSD 11.3 和 Darwin 19.3 上重现了这种行为。我是否误解了文档或使用了错误的语法?

Phi*_*lᵀᴹ 7

让它以几种方式工作:

postgres@ironforge:~$ cat onerrorstop.sql 
\set ON_ERROR_STOP on
select * from gurumeditationerror;
postgres@ironforge:~$ psql -f 'onerrorstop.sql'
psql:onerrorstop.sql:2: ERROR:  relation "gurumeditationerror" does not exist
LINE 1: select * from gurumeditationerror;
                  ^
postgres@ironforge:~$ echo $?
3
postgres@ironforge:~$
Run Code Online (Sandbox Code Playgroud)

和:

postgres@ironforge:~$ echo "\set ON_ERROR_STOP on
> select * from smellyfarts;" | psql
ERROR:  relation "smellyfarts" does not exist
LINE 1: select * from smellyfarts;
                  ^
postgres@ironforge:~$ echo $?
3
postgres@ironforge:~$
Run Code Online (Sandbox Code Playgroud)

和:

postgres@ironforge:~$ cat onerrorstop.sql 
select * from gurumeditationerror;

postgres@ironforge:~$ psql -v ON_ERROR_STOP=on -f 'onerrorstop.sql' 
psql:onerrorstop.sql:1: ERROR:  relation "gurumeditationerror" does not exist
LINE 1: select * from gurumeditationerror;
                      ^
postgres@ironforge:~$ echo $?
3
postgres@ironforge:~$ 

Version:

    postgres@ironforge:~$ psql --version
    psql (Post greySKULL) 9.5.19
    postgres@ironforge:~$
Run Code Online (Sandbox Code Playgroud)