我在一个连接到 postgres 数据库的项目中使用 Elixir。我想在我连接到的数据库上运行以下查询,但我不知道该怎么做,因为我对 Elixir 和 SQLAlchemy 还很陌生。有谁知道怎么做?
VACUUM FULL ANALYZE table
更新
错误是:“UnboundExecutionError:找不到在 SQL 表达式或此会话上配置的绑定”。与之前发出的 session.close() 的结果相同。我确实尝试过 metadata.bind.execute() 并且适用于简单的选择。但是对于 VACUUM 它说 - “InternalError: (InternalError) VACUUM 不能在事务块内运行”,所以现在我想弄清楚如何关闭它。
更新 2
我可以执行查询,但我仍然遇到同样的错误——即使我创建了一个新会话并关闭了前一个会话。
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# ... insert stuff
old_session.commit()
old_session.close()
new_sess = sessionmaker(autocommit=True)
new_sess.configure(bind=create_engine('postgres://user:pw@host/db', echo=True))
sess = new_sess()
sess.execute('VACUUM FULL ANALYZE table')
sess.close()
我得到的输出是
2009-12-10 10:00:16,769 INFO sqlalchemy.engine.base.Engine.0x...05ac VACUUM FULL ANALYZE table
2009-12-10 10:00:16,770 INFO sqlalchemy.engine.base.Engine.0x...05ac {}
2009-12-10 10:00:16,770 INFO sqlalchemy.engine.base.Engine.0x...05ac ROLLBACK
finishing failed run, (InternalError) VACUUM cannot run inside a transaction block
'VACUUM FULL ANALYZE table' {}
更新 3
感谢大家的回应。我无法找到我想要的解决方案,但我想我将使用此处描述的PostgreSQL - 如何从事务块外的代码运行 VACUUM?. 这并不理想,但它有效。