Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 当Postgres脚本遇到错误时,如何停止它?_Postgresql - Fatal编程技术网

Postgresql 当Postgres脚本遇到错误时,如何停止它?

Postgresql 当Postgres脚本遇到错误时,如何停止它?,postgresql,Postgresql,有没有一种方法可以指定,在执行sql脚本时,当遇到脚本上的第一个错误时,它会停止,而不管以前有没有错误,它通常会继续执行。这并不完全是您想要的,但是如果您使用开始事务并以结束事务结束,它实际上会跳过第一个错误之后的所有内容,然后它会回滚错误之前所做的所有操作。我假设您使用的是psql,这可能很方便添加到~/.psqlrc文件中 \set ON_ERROR_STOP on 这将使它在第一个错误时中止。如果您没有它,即使有一个事务,它也会继续执行您的脚本,但在脚本结束之前所有操作都会失败 正如Pa

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

这并不完全是您想要的,但是如果您使用
开始事务并以
结束事务结束,它实际上会跳过第一个错误之后的所有内容,然后它会回滚错误之前所做的所有操作。

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

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

正如Paul所说,您可能希望使用事务。如果您不想更改脚本,也可以使用
psql--single transaction…
完成

下面是一个完整的例子,在.psqlrc中有ON_ERROR_STOP:

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

我认为向.psqlrc添加以下内容的解决方案远远不够完美

\set ON_ERROR_STOP on
还有更简单和方便的方法-使用带参数的psql:

psql -v ON_ERROR_STOP=1
最好也使用
-X
参数关闭.psqlrc文件使用。 非常适合我

p、 在彼得·艾森特的《大邮报》中找到了解决方案。谢谢你,彼得!
我总是喜欢直接参考手册

从:

退出状态

如果正常完成,psql将返回0到shell,如果是致命错误,则返回1 发生自身错误(例如内存不足、找不到文件),2如果 与服务器的连接出现故障,会话不交互, 如果脚本和变量中发生错误,则返回3 已设置ON\u错误\u停止


默认情况下,如果您在PostgreSQL server上运行的sql代码出错,则psql不会退出错误。它将捕获错误并继续。如上所述,如果将
ON\u ERROR\u STOP
设置设置为ON,当psql捕获sql代码中的错误时,它将退出并将
3
返回shell。

即使事务失败,psql命令的退出状态仍然为0。事实上,即使使用了
--single transaction
-v ON_ERROR_STOP=1
对于非零存在状态仍然是必需的
-v ON_ERROR_STOP=ON
至少在9.2中也有效。我怀疑其中任何一个都是允许的。它在交互模式下不工作,这让我困惑了一分钟。是的,但它仍然解析所有内容。如果您只想在第一个事务成功的情况下执行第二个事务,这将不起作用。是的,并且不要忘记在遇到DDL Create table错误时继续。。。(版本:postrgres 10)。是的,它跳过了一张桌子,落到了其他桌子上。。。