postgres 데이터베이스에 연결된 프로젝트에서 Elixir을 사용하고 있습니다. 내가 연결되어있는 데이터베이스에 대해 다음 쿼리를 실행하고 싶지만, 필자는 Elixir와 SQLAlchemy에 익숙하지 않기 때문에 어떻게해야할지 모르겠습니다. 누구나 어떻게 알아?Elixir로 SQL 쿼리 실행
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:[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?과 함께 갈 것이라고 생각합니다. 이상적은 아니지만 작동합니다. 당신은 SQLAlchemy의 세션에 액세스 할 수있는 경우
시도해 보았지만 UnboundExecutionError가 있습니다. session은 sqlalchemy.orm.scoping.ScopedSession의 인스턴스이며 다른 쿼리에 대해 session.commit()을 호출하면 작동합니다. 그것이 커밋 전후인지가 중요합니까? – mozillalives
문을 실행하기 전에 session.close()를 시도 할 수 있습니다. 또한, 오류가 잘하면 추적과 함께, 그게 뭐죠? –
"UnboundExecutionError : SQL 식 또는이 세션에 구성된 바인드를 찾을 수 없습니다." 그리고 이전에 session.close()를 사용했을 때와 같은 결과가 나타납니다. 나는 metadata.bind.execute()를 시도해 보았고 간단한 선택을 위해 작동했다. 하지만 VACUUM의 경우 "InternalError : (InternalError) VACUUM은 트랜잭션 블록 내에서 실행할 수 없습니다."라고 했으므로 이제는이를 해제하는 방법을 알아 내려고합니다. – mozillalives