【发布时间】:2014-11-24 20:07:16
【问题描述】:
我正在将 10000 条记录批量插入 Postgres:
INSERT INTO TABLE VALUES (v1),...,(v10000)
我通过 Python Psycopg2 库执行此操作。目前,如果其中一个元组,比如 5000 个炸弹(例如,如果一个字段的类型错误),我的整个批量插入将失败,因为生成了一个异常。我正在寻找等效的 MySQLs --force 标志来解决这个问题;它告诉 MySQL 继续处理任何错误 (http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html#option_mysql_force)
我这里什么都看不到,这是一个更新的PG,这很令人担忧:http://www.postgresql.org/docs/9.3/static/sql-select.html
【问题讨论】:
-
轰炸什么?
-
例如“值 X 对于“smallint”来说太大了”。我只想不插入所有违反某种数据插入错误的行并继续。因为我不提前知道所有可能的数据错误,所以我宁愿在尝试插入之前不实现这个逻辑来检查元组……那将是一场噩梦。
-
我认为这是不可能的。 Postgres 的事务处理比 MySQL 的更严格。 Postgres 不支持只能提交部分语句的事务,因为它违反了事务的“原子”概念。可以完成这样的事情的唯一方法是使用单个插入和每个插入的保存点。但这会很慢。
标签: postgresql psycopg2