私は、postgresデータベースに接続するプロジェクトでElixirを使用しています。私は接続されているデータベースで次のクエリを実行したいが、私はElixirとSQLAlchemyを使い慣れていないので、どのように行うのか分からない。誰でも知っている?エリクシールでSQLクエリを実行
VACUUM FULL ANALYZE table
更新
エラーがある: "UnboundExecutionError:SQL式またはこのセッションで構成されたバインドが見つかりませんでした"。 session.close()と同じ結果が以前に発行されました。私はmetadata.bind.execute()を実行しようとしましたが、それは簡単な選択のために働いていました。しかし、VACUUMについては、 "InternalError:(InternalError)VACUUMはトランザクションブロック内で実行できません"というように、今私はそれをオフにする方法を理解しようとしています。
アップデート2
私は、クエリを実行するために取得することができますが、私はまだ同じエラーを取得しています - 私は新しいセッションを作成し、前の1を閉じた場合でも。
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:[email protected]/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?。それは理想的ではありませんが、機能します。
私はそれを試みましたが、私はUnboundExecutionErrorを得ました。 sessionはsqlalchemy.orm.scoping.ScopedSessionのインスタンスです。私が他のクエリのsession.commit()を呼び出すと、それが動作します。それがコミットの前か後かどうかは重要ですか? – mozillalives
ステートメントを実行する前にsession.close()を実行しようとすることができます。また、エラーがうまくトレースバックと一緒に来た、それは何と言う? –
"UnboundExecutionError:SQL式またはこのセッションで構成されたバインドを見つけることができませんでした"。 session.close()と同じ結果が以前に発行されました。私はmetadata.bind.execute()を実行しようとしましたが、それは簡単な選択のために働いていました。しかし、VACUUMについては、 "InternalError:(InternalError)VACUUMはトランザクションブロック内で実行できません"というように、今私はそれをオフにする方法を理解しようとしています。 – mozillalives