有没有办法指定在执行sql脚本时,当遇到脚本上的第一个错误时它会停止,它通常会继续,而不管以前的错误。
由于
答案 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)
我总是喜欢直接参考手册。
退出状态
如果正常完成,psql将0返回外壳程序,如果致命则返回1 发生自己的错误(例如内存不足,找不到文件),如果2 与服务器的连接出现问题,会话没有互动, 和3如果脚本和变量中发生错误 设置了ON_ERROR_STOP。
默认情况下,如果您在PostgreSQL服务器上运行的sql代码错误psql不会退出错误。它将捕获错误并继续。如上所述,如果将ON_ERROR_STOP
设置为on,则当psql在sql代码中捕获错误时,它将退出并将3
返回到shell。