忽略 Postgresql 批量插入错误
假设这个简单的 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
处理输入文件的应用程序需要用保存点包装每个 INSERT 语句。如果插入失败,可以回滚到最后一个保存点。类似于:(
伪代码)
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)