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