是否可以从psycopg2或sqlalchemy为PostgreSQL发出"VACUUM ANALYZE <tablename>"?

don*_*llo 7 python postgresql sqlalchemy psycopg2 vacuum

好吧,这个问题几乎总结了它.我的数据库活动非常密集,我想以编程方式发布真空分析.但是我收到一条错误,指出查询无法在事务中执行.还有其他方法吗?

Gle*_*ard 11

这是Python DB-API中的一个缺陷:它为您启动一个事务.它不应该这样做; 是否以及何时开始交易应由程序员决定.像这样的低级核心API不应该照顾开发人员并做一些事情,比如在我们的背后开始交易.我们是大男孩 - 我们可以自己开始交易,谢谢.

使用psycopg2,您可以使用API​​扩展禁用此不幸行为:call connection.autocommit = True.遗憾的是,没有标准的API,因此您必须依赖非标准扩展来发出必须在事务之外执行的命令.

没有语言没有它的疣,这是Python的一个.我之前也被这种感觉所困扰.

  • 只是注释“ connection.autocommit”是布尔属性,而不是函数。因此,要在事务外部执行查询,可以在执行VACUUM之前设置`connection.autocommit = True`。 (2认同)

mdh*_*mdh 8

您可以autocommit使用SQLAlchemy的raw_connection(将为您提供“原始的” psycopg2连接)打开Postgres 模式:

import sqlalchemy
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT


engine = sqlalchemy.create_engine(url)
connection = engine.raw_connection()
connection.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = connection.cursor()
cursor.execute("VACUUM ANALYSE table_name")
Run Code Online (Sandbox Code Playgroud)