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 - how to run VACUUM from code outside transaction block? . 理想的ではありませんが、機能します。