118

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

4

4 回答 4

185

我认为将以下内容添加到 .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

于 2013-04-26T15:08:32.513 回答
29

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

\set ON_ERROR_STOP on

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

你可能想像保罗所说的那样使用交易。psql --single-transaction ...如果您不想更改脚本,也可以这样做。

所以一个完整的例子,在你的 .psqlrc 中有 ON_ERROR_STOP:

psql --single-transaction --file /your/script.sql
于 2010-12-18T23:40:15.560 回答
9

这不是您想要的,但是如果您以 开始脚本begin transaction;并以 结束end transaction;,它实际上会跳过第一个错误之后的所有内容,然后它会回滚它在错误之前所做的所有事情。

于 2010-12-18T21:57:32.077 回答
1

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

PostgreSQL 手册

退出状态

如果 psql 正常完成,则返回 0 给 shell,如果发生了自己的致命错误(例如内存不足,找不到文件),则返回 1,如果与服务器的连接变坏并且会话不是交互式的,则返回 2,如果脚本中发生错误并且设置了变量 ON_ERROR_STOP。

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

于 2018-08-22T23:03:53.193 回答