我想通过1000条记录(批量插入)将我的数据插入到PostgreSQL 1000中,以便在DBMS上快速低负载,所以我现在的代码是:
cursor.execute("INSERT INTO bar(first_name,last_name) VALUES ('David', 'Bar')")
cursor.execute("INSERT INTO bar(first_name,last_name) VALUES ('David2', 'Bar2')")
cursor.execute("INSERT INTO bar(first_name,last_name) VALUES ('David3', 'Bar3')")
.... etc
connection.commit()
正如你可以看到我在最后提交了更改,这为我在每次插入查询后提交更改提供了大量时间。 问题是如果任何查询由于任何原因(无效数据)崩溃,所有quires将无法执行,我将丢失数据。 反正有没有节省插入时间,同时避免数据丢失?
答案 0 :(得分:0)
这取决于您的要求当然,根据您的交易需求,我会推荐以下选项之一:
SAVEPOINT
的(子交易):BEGIN;
SAVEPOINT savepoint;
INSERT ...;
RELEASE savepoint;
SAVEPOINT savepoint;
INSERT ...;
/* If you're getting an error */
ROLLBACK TO SAVEPOINT savepoint;
COMMIT;
AUTOCOMMIT
SET AUTOCOMMIT TO ON;
INSERT ...
INSERT ...
INSERT ...