有没有办法指定在执行sql脚本时遇到脚本上的第一个错误时停止,通常会继续,无论以前的错误如何。
我认为向 .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
我假设您正在使用
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;
结束,它实际上会跳过第一个错误之后的所有内容,然后它将回滚在错误之前执行的所有操作。
我总是喜欢直接参考手册。
来自 PostgreSQL 手册:
退出状态
psql 如果正常完成则向 shell 返回 0,如果致命则返回 1 发生自身错误(例如内存不足、未找到文件),如果发生错误则为 2 与服务器的连接出现问题并且会话无法交互, 3 如果脚本和变量中发生错误 ON_ERROR_STOP 已设置。
默认情况下,如果您在 PostgreSQL 服务器上运行的 sql 代码出现错误,psql 不会退出错误。它将捕获错误并继续。如果如上所述,将
ON_ERROR_STOP
设置为 on,则当 psql 捕获 sql 代码中的错误时,它将退出并将 3
返回到 shell。
例如,您可以启用ON_ERROR_STOP,当您使用用户
off
和数据库john
登录时,默认为apple
,如下所示:
psql -U john -v ON_ERROR_STOP=on apple
psql -U john --variable=ON_ERROR_STOP=on apple
psql -U john --set=ON_ERROR_STOP=on apple
并且,当您使用
psql从文件
ON_ERROR_STOP
运行脚本时,您可以启用 test.sql
,如下所示:
psql -U john -v ON_ERROR_STOP=on -f test.sql apple
并且,您可以在登录后启用
ON_ERROR_STOP
,如下所示:
\set ON_ERROR_STOP on
或者。 *此命令只能启用
ON_ERROR_STOP
,而不能切换 on
和 off
:
\set ON_ERROR_STOP
并且,您可以使用
cho显示
ON_ERROR_STOP
的值,如下所示。 *别忘了在 :
之前加上 ON_ERROR_STOP
:
postgres=# \echo :ON_ERROR_STOP
on
*备注:
不要使用小写字母
on_error_stop
,这不起作用。
您可以使用
ON_ERROR_STOP
、oN
、1
、TrUe
等启用 tR
。
您可以使用
ON_ERROR_STOP
、oFf
、0
、FaLsE
等禁用 fA
。