忽略Postgresql批量插入错误

时间:2010-10-06 13:15:44

标签: sql postgresql insert batch-insert

假设这个简单的SQL查询:

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

让我们说val3col1的无效值。这将导致psql中止整个INSERT命令 - 它也不会插入(val1,val2)(val5,val6)

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

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

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

...这使得未将全部30000+值插入表中,因为其中一个值是错误的。

1 个答案:

答案 0 :(得分:1)

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

(伪代码)

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