忽略 Postgresql 批量插入错误

发布于 2024-09-26 11:52:59 字数 604 浏览 3 评论 0原文

假设这个简单的 SQL 查询:

INSERT INTO table (col1,col2) VALUES (val1,val2),(val3,val4),(val5,val6);

假设 val3 对于 col1 来说是无效值。这将导致 psql 中止整个 INSERT 命令 - 它不会插入 (val1,val2) 也不会插入 (val5,val6)

是否可以使 postgresql 忽略此错误,以便它不会插入 (val3,val4) 对,但仍会继续执行 (val1,val2)(val5 ,val6)?

我从我的合作伙伴处获得文本文件中的每日数据库转储(无法更改),我用它来制作它的副本。有时,他巨大的 INSERT 查询会导致如下错误:

ERROR:  invalid byte sequence for encoding "UTF8": 0x00

...这使得整个 30000 多个值没有插入到表中,因为其中一个值是错误的。

Assume this simple SQL query:

INSERT INTO table (col1,col2) VALUES (val1,val2),(val3,val4),(val5,val6);

Lets say val3 is invalid value for col1. This would cause psql to abort whole INSERT command - it would not insert (val1,val2) nor (val5,val6) either.

Is it possible to make postgresql ignore this error so it does not insert (val3,val4) pair but would still proceed with (val1,val2) and (val5,val6)?

I'm getting daily database dumps in text files from my partner (can't change that), which I use to make my copy of it. Sometimes his huge INSERT queries cause errors like:

ERROR:  invalid byte sequence for encoding "UTF8": 0x00

... which makes whole 30000+ values not inserted to the table, because one of those values is wrong.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅忆 2024-10-03 11:52:59

处理输入文件的应用程序需要用保存点包装每个 INSERT 语句。如果插入失败,可以回滚到最后一个保存点。类似于:(

伪代码)

foreach line
  set savepoint
  try 
    insert current line
  catch 
    rollback to savepoint
  end
endloop
commit

The application that processes the input file needs to wrap each INSERT statement with a savepoint. If the insert fails, it can be rolled back to the last savepoint. Something like:

(pseudo code)

foreach line
  set savepoint
  try 
    insert current line
  catch 
    rollback to savepoint
  end
endloop
commit
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文