与MySQL等价的PostgreSQL——强制标志

与MySQL等价的PostgreSQL——强制标志,postgresql,psycopg2,Postgresql,Psycopg2,我正在向Postgres大量插入10000条记录: INSERT INTO TABLE VALUES (v1),...,(v10000) 我通过Python Psycopg2库来实现这一点。目前,如果元组中有一个元组,例如number 5000 bombs(例如,如果某个字段的类型错误),我的整个批插入将失败,因为生成了异常。我正在寻找MySQLs的等价物——force-flag,它正好解决了这个问题;它告诉MySQL继续执行任何错误() 我在这里没有看到任何东西,这是一个更新的PG,这是非常

我正在向Postgres大量插入10000条记录:

INSERT INTO TABLE VALUES (v1),...,(v10000)
我通过Python Psycopg2库来实现这一点。目前,如果元组中有一个元组,例如number 5000 bombs(例如,如果某个字段的类型错误),我的整个批插入将失败,因为生成了异常。我正在寻找MySQLs的等价物——force-flag,它正好解决了这个问题;它告诉MySQL继续执行任何错误()


我在这里没有看到任何东西,这是一个更新的PG,这是非常令人担忧的:

在psql中执行此操作
\set ON\u ERROR\u ROLLBACK ON
,然后再试一次

告诉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!

作为交易的一部分,我是否首先执行此操作?如前所述,我是通过Psycopg2进行交互的,而不是本机psql CLI。是的,这对我没有帮助。除非有人知道我怎么能永远把这件事搞定。它是一个运行时配置参数,所以我想可以在postgresql.conf中设置它。它的作用是什么?例如“X值对于“smallint”来说太大了”。我只是不想插入所有违反某种数据插入错误的行并继续。因为我没有提前知道所有可能的数据错误,我宁愿在尝试插入之前不实现这个逻辑来检查元组…这将是一场噩梦。我认为这是不可能的。Postgres的事务处理比MySQL更严格。Postgres不支持只能提交部分语句的事务,因为它违反了事务的“原子”概念。这样做的唯一方法是为每个插入使用带有保存点的单个插入。但这将非常缓慢。批量插入是事务的一部分,如果事务中的其他部分失败,则必须回滚该事务;这会影响吗?当然会。对不起,您不能在事务中执行“自动提交”。如果我是你,我只需重新排序SQL:使用自动提交填充批量表;启动事务,如果失败,只需删除行/删除批量表即可。