PostgreSQL相当于MySQL --force标志

时间:2014-11-24 20:07:17

标签: postgresql psycopg2

我正在向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

2 个答案:

答案 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中执行此操作并再次尝试