我正在运行一堆使用Python和psycopg2的查询。我创建了一个有大约200万行的大型临时表,然后通过使用cur.fetchmany(1000)
从中一次获得1000行,并运行涉及这些行的更广泛的查询。但是,广泛的查询是自给自足的 - 一旦完成,我就不再需要他们的结果了。当我移动到下一个1000时。postgresql:共享内存不足?
然而,大约1000000行,我从psycopg2得到一个异常:
psycopg2.OperationalError: out of shared memory
HINT: You might need to increase max_locks_per_transaction.
有趣的是,当我执行一个查询来删除一些临时表时,发生了更广泛的查询。
为什么会发生这种情况?有什么办法可以避免它?令人讨厌的是,这发生在一半,意味着我必须再次运行它。 max_locks_per_transaction
可能与什么有关?
注意:我没有做任何.commit()
s,但是我删除了所有创建的临时表,而且我对每个“扩展”事务只触摸相同的5个表,所以我没有看看如何用完桌面锁可能是问题...
交易如何转换为游标和.commits?我没有做任何.commits,但我正在使用新的游标进行查询 – Claudiu 2010-06-28 14:48:49