Postgres sql脚本错误失败
这不正是你想要的,但如果你有begin transaction;
开始你的脚本,并与end transaction;
结束,它实际上将第一个错误后跳过一切,然后它会回滚它的错误之前所做的一切。
我假设您使用的是psql
,这可能会方便地添加到您的~/.psqlrc
文件中。
\set ON_ERROR_STOP on
这将使其中止第一个错误。如果你没有它,即使有一个事务,它也会继续执行你的脚本,但是一切都会失败,直到脚本结束。
你可能想用保罗说的交易。如果您不想更改脚本,也可以使用psql --single-transaction ...
完成。
所以,一个完整的例子,在你的.psqlrc ON_ERROR_STOP:
psql --single-transaction --file /your/script.sql
即使事务失败,psql命令的退出状态仍为0. – 2011-06-06 05:30:13
事实上,即使使用'--single-transaction',对于非零存在状态,'-v ON_ERROR_STOP = 1'仍然是必需的 – bitek 2015-03-04 09:54:52
我认为解决方案添加以下内容.psqlrc远未完善
\set ON_ERROR_STOP on
存在更简单方便的方法 - 使用psql参数:
psql -v ON_ERROR_STOP=1
最好还用-X
参数关闭.psqlrc文件的使用情况。 完美适合我
p.s.该解决方案从Peter Eisentraut的伟大职位中找到。谢谢,彼得! http://petereisentraut.blogspot.com/2010/03/running-sql-scripts-with-psql.html
是的,但它仍然解析了一切。如果您只想在第一次成功时执行第二次*事务,则这不起作用。 – Wildcard 2017-05-06 04:22:28