有没有办法设置一个选项,即使有错误也会导致 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
启用时,如果事务块中的语句产生错误,则 错误被忽略,事务继续。交互时,例如 错误仅在交互式会话中被忽略,而不是在阅读时 脚本文件。关闭时(默认),事务中的语句 产生错误的块中止整个事务
【讨论】:
它通过隐式SAVEPOINT
s 工作,所以如果每个事务有很多语句,ON_ERROR_ROLLBACK
可能会降低性能。
是的,ON_ERROR_ROLLBACK 的实现并不聪明。我们需要类似 Oracle 的语句级回滚。
从程序中查询数据库有没有类似的情况?【参考方案2】:
聚会有点晚了,但我正在对这个主题进行一些研究,并在这里找到了一篇优秀的文章:Postgres ON_ERROR_ROLLBACK explained
【讨论】:
以上是关于有没有办法设置一个选项,即使有错误也会导致 PostgreSQL 脚本继续?的主要内容,如果未能解决你的问题,请参考以下文章
即使使用 `?` 链接或条件检查,Typescript Partial<T> 也会导致未定义的错误
即使没有发出预检请求,也会在 POST 请求中出现 CORS 错误