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


34

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

例如psql -c“创建表foo(条整数)”

psql -f foobar.sql

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

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

谢谢。

Answers:


37

您可以使用以下语句。

psql -v ON_ERROR_STOP=1 -f foobar.sql

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


21

我发现了解决方法。

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

例:

\set ON_ERROR_STOP true

+1查看手册页:)
serverhorror

+1是最佳解决方案,因为它允许我脚本中设置变量,因此我可以相信它始终可以正确运行,而不必担心运行时上下文。
布兰登2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.