有没有办法指定在执行 sql 脚本时遇到脚本上的第一个错误时停止,它通常会继续,而不管以前的错误。
4 回答
我认为将以下内容添加到 .psqlrc 的解决方案远非完美
\set ON_ERROR_STOP on
存在更简单方便的方法 - 使用带参数的 psql:
psql -v ON_ERROR_STOP=1
最好使用-X
参数关闭 .psqlrc 文件使用。非常适合我
ps 在 Peter Eisentraut 的精彩帖子中找到的解决方案。谢谢你,彼得! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
我假设您正在使用psql
,这可能很方便添加到您的~/.psqlrc
文件中。
\set ON_ERROR_STOP on
这将使它在第一个错误时中止。如果您没有它,即使有事务,它也会继续执行您的脚本,但在脚本结束之前一切都会失败。
你可能想像保罗所说的那样使用交易。psql --single-transaction ...
如果您不想更改脚本,也可以这样做。
所以一个完整的例子,在你的 .psqlrc 中有 ON_ERROR_STOP:
psql --single-transaction --file /your/script.sql
这不是您想要的,但是如果您以 开始脚本begin transaction;
并以 结束end transaction;
,它实际上会跳过第一个错误之后的所有内容,然后它会回滚它在错误之前所做的所有事情。
我总是喜欢直接参考手册。
退出状态
如果 psql 正常完成,则返回 0 给 shell,如果发生了自己的致命错误(例如内存不足,找不到文件),则返回 1,如果与服务器的连接变坏并且会话不是交互式的,则返回 2,如果脚本中发生错误并且设置了变量 ON_ERROR_STOP。
默认情况下,如果您在 PostgreSQL 服务器上运行的 sql 代码错误 psql 不会退出错误。它将捕获错误并继续。如果如上所述,您将ON_ERROR_STOP
设置设置为 on,则当 psql 在 sql 代码中捕获错误时,它将退出并返回3
到 shell。