有时我需要从psycopg 2执行一个查询,而这个查询 * 不在 * 事务块中。
例如:
cursor.execute('create index concurrently on my_table (some_column)')
不起作用:
InternalError: CREATE INDEX CONCURRENTLY cannot run inside a transaction block
我看不出有什么简单的方法可以用psycopg 2来做到这一点。我错过了什么?
我可能可以调用os.system('psql -c "create index concurrently"')
或类似的东西来让它从我的python代码中运行,但是如果能够在python中运行它而不依赖psql来实际位于容器中,那就更好了。
是的,对于这个特定的用例,我必须使用concurrently
选项。
另一次我探索这个问题但没有找到明显答案的情况是,我有一组sql命令,我想用一个execute()
调用这些命令,其中第一个命令暂时锁定一个资源。该资源将在execute()
的整个持续时间内保持锁定一笔大买卖。
在这种情况下,我可以将查询分解为一系列execute()语句--每个语句都成为自己的事务,这是可以的。
似乎应该有一个办法,但我似乎错过了它。希望这是一个简单的答案有人。
1条答案
按热度按时间2eafrhcq1#
根据psycopg2文档:
于是在连接上:
conn.set_session(autocommit=True)
来自psycopg2文档的更多资源:
事务控制
connection.autocommit