首页 文章

Postgres sql在脚本错误时失败

提问于
浏览
78

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

谢谢

4 回答

  • 121

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

    \set ON_ERROR_STOP on
    

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

    psql -v ON_ERROR_STOP=1
    

    更好地使用 -X 参数关闭.psqlrc文件用法 . 适合我

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

  • 12

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

    \set ON_ERROR_STOP on
    

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

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

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

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

    这不完全是你想要的,但是如果你用 begin transaction; 开始你的脚本并以 end transaction; 结束,它将在第一次错误之后跳过所有内容,然后它将回滚它在错误之前所做的一切 .

  • 6

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

    来自PostgreSQL Manual

    退出状态psql如果正常结束则返回0到shell,如果发生自身致命错误(例如内存不足,找不到文件),则返回1;如果与服务器的连接变坏且会话不是交互式,则返回2如果脚本中发生错误并且设置了变量ON_ERROR_STOP,则返回3 .

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

相关问题