Postgres:执行sql文件时非零退出代码?

Jin*_*Kim 35 postgresql sql database psql

我正在编写一个 shell 脚本,它使用 2 种形式调用 psql……一种是通过命令(-c),另一种是通过文件(-f)。

例如 psql -c "创建表 foo (bar integer)"

psql -f foobar.sql

这些形式之间的一个区别是,如果遇到错误,通过命令 (-c) 的调用将返回非零退出代码,而通过文件 (-f) 的调用似乎总是返回零。

我想知道这种行为是否有解决方法?(即,如果在执行文件时发生错误,则返回非零值)。

谢谢。

小智 41

您可以使用以下语句。

psql -v ON_ERROR_STOP=1 -f foobar.sql
Run Code Online (Sandbox Code Playgroud)

即使foobar.sql文件未ON_ERROR_STOP在文件顶部启用,这也将返回正确的返回代码。

  • 天啊,这派上用场了 (2认同)

Jin*_*Kim 23

我发现了如何解决这个问题。

我需要ON_ERROR_STOP在文件顶部启用。

例子:

\set ON_ERROR_STOP true
Run Code Online (Sandbox Code Playgroud)