Postgresql因脚本错误而失败

时间:2010-12-18 21:54:54

标签: postgresql

有没有办法指定在执行sql脚本时,当遇到脚本上的第一个错误时它会停止,它通常会继续,而不管以前的错误。

由于

4 个答案:

答案 0 :(得分:137)

我认为在.psqlrc中添加以下内容的解决方案远非完美

\set ON_ERROR_STOP on

存在更简单方便的方法 - 使用psql和参数:

psql -v ON_ERROR_STOP=1

最好还使用-X参数关闭.psqlrc文件用法。 适合我的工作

P.S。在Peter Eisentraut的精彩帖子中找到了解决方案。谢谢你,彼得! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html

答案 1 :(得分:14)

我假设您使用的是psql,这可能很方便添加到您的~/.psqlrc文件中。

\set ON_ERROR_STOP on

这将使其在第一个错误中止。如果你没有它,即使是一个事务,它也会继续执行你的脚本,但是在脚本结束之前一切都会失败。

保罗说,你可能想要使用交易。如果您不想更改脚本,也可以使用psql --single-transaction ...完成。

这是一个完整的例子,你的.psqlrc中有ON_ERROR_STOP:

psql --single-transaction --file /your/script.sql

答案 2 :(得分:6)

这不完全是您想要的,但是如果您使用begin transaction;启动脚本并以end transaction;结束,它将在第一个错误之后实际跳过所有内容,然后它将回滚它之前执行的所有操作错误。

答案 3 :(得分:0)

我总是喜欢直接参考手册。

来自PostgreSQL Manual

  

退出状态

     

如果正常完成,psql将0返回外壳程序,如果致命则返回1   发生自己的错误(例如内存不足,找不到文件),如果2   与服务器的连接出现问题,会话没有互动,   和3如果脚本和变量中发生错误   设置了ON_ERROR_STOP。

默认情况下,如果您在PostgreSQL服务器上运行的sql代码错误psql不会退出错误。它将捕获错误并继续。如上所述,如果将ON_ERROR_STOP设置为on,则当psql在sql代码中捕获错误时,它将退出并将3返回到shell。