3

假设这个简单的 SQL 查询:

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

可以说val3是无效的值col1(val1,val2)这将导致 psql 中止整个 INSERT 命令——它也不会插入(val5,val6)

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

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

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

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

4

1 回答 1

1

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

(伪代码)

前行
  设置保存点
  尝试
    插入当前行
  抓住
    回滚到保存点
  结尾
结束循环
犯罪
于 2010-10-06T19:34:47.770 回答