【发布时间】:2011-03-09 03:12:06
【问题描述】:
我正在使用 Python 和 psycopg2 运行一堆查询。我创建了一个包含大约 200 万行的大型临时表,然后使用 cur.fetchmany(1000) 一次从中获取 1000 行,并运行涉及这些行的更广泛的查询。不过,这些广泛的查询是自给自足的——一旦完成,当我进入下一个 1000 时,我就不再需要他们的结果了。
但是,在大约 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 个表,所以我不看不到表锁用完可能是什么问题...
【问题讨论】:
标签: python database postgresql psycopg2