假设这个简单的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+值插入表中,因为其中一个值是错误的。
答案 0 :(得分:1)
处理输入文件的应用程序需要使用保存点包装每个INSERT语句。如果插入失败,则可以将其回滚到最后一个保存点。类似的东西:
(伪代码)
foreach line set savepoint try insert current line catch rollback to savepoint end endloop commit