有没有办法设置一个选项,即使有错误也会导致 PostgreSQL 脚本继续?

Posted

技术标签:

【中文标题】有没有办法设置一个选项,即使有错误也会导致 PostgreSQL 脚本继续?【英文标题】:Is there a way to set an option that will cause a PostgreSQL script to continue even if there are errors? 【发布时间】:2013-02-16 08:29:05 【问题描述】:

是否有设置选项的命令,即使出现错误也会导致 PostgreSQL 脚本继续运行?

例如,有时当我将电子表格中的大量数据插入到表中时,我使用公式创建 INSERT 语句,然后将语句复制到文件中并执行它们,或者将它们复制到 PgAdmin 中运行他们。准确性并不总是很重要,我不希望整个过程因为几条记录而失败。

语法错误不是这里的问题,只是由于某些错误而失败的命令,例如尝试创建已存在的索引或插入重复记录。

【问题讨论】:

@a_horse_with_no_name 这是否适用于任何命令,而不仅仅是插入命令? 是的,这适用于所有命令(因为 Postgres 中的几乎每个语句都是事务性的) 【参考方案1】:

如果使用psql,你想要:

\set ON_ERROR_ROLLBACK on

来自manual:

ON_ERROR_ROLLBACK

启用时,如果事务块中的语句产生错误,则 错误被忽略,事务继续。交互时,例如 错误仅在交互式会话中被忽略,而不是在阅读时 脚本文件。关闭时(默认),事务中的语句 产生错误的块中止整个事务

【讨论】:

它通过隐式SAVEPOINTs 工作,所以如果每个事务有很多语句,ON_ERROR_ROLLBACK 可能会降低性能。 是的,ON_ERROR_ROLLBACK 的实现并不聪明。我们需要类似 Oracle 的语句级回滚。 从程序中查询数据库有没有类似的情况?【参考方案2】:

聚会有点晚了,但我正在对这个主题进行一些研究,并在这里找到了一篇优秀的文章:Postgres ON_ERROR_ROLLBACK explained

【讨论】:

以上是关于有没有办法设置一个选项,即使有错误也会导致 PostgreSQL 脚本继续?的主要内容,如果未能解决你的问题,请参考以下文章

即使使用 `?` 链接或条件检查,Typescript Partial<T> 也会导致未定义的错误

即使没有发出预检请求,也会在 POST 请求中出现 CORS 错误

即使由于错误导致插入失败,MySQL 自动增量值也会增加

http 403 禁止访问xp系统怎么设置

即使使用 #available(iOS 15.0, *),iOS 15 唯一的视图修饰符也会导致 iOS 14 崩溃

即使我设置了 CORS 原点,也会不断收到 CORS 错误