我正在向Postgres批量插入10000条记录:
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
答案 0 :(得分:1)
告诉psycopg您希望它使用事务隔离级别“autocommit”,即它不会为您打开事务,并且每个语句都将自动提交。请注意,您必须捕获异常并忽略(或更好地记录)它们。例如:
import psycopg2
import psycopg2.extensions
conn = psycopg2.connect("...")
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
curs = conn.cursor()
for row in your_data:
try:
curs.execute("INSERT INTO table VALUES (%s, %s, ...)", row)
except Exception, err:
print err
# no need to commit!
答案 1 :(得分:0)
在psql \set ON_ERROR_ROLLBACK on
中执行此操作并再次尝试