0

SqlAlchemy セッションは次のように定義されました。

DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))

そして構成されました:

DBSession.configure(bind=engine)
Base.metadata.bind = engine

また、生のSQLをトランザクションに実行してjsonbフィールドのインデックスを作成する必要があります。

with transaction.manager:
    sql = "CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));"
    DBSession.execute(sql)

操作の SqlAlchemy ログは次のようになります。

BEGIN (implicit)
INFO CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));
INFO  {}
INFO  ROLLBACK

また、インデックスは作成されません。

ただし、同じ SQL コマンドを実行すると、psqlエラーなしでインデックスが作成されます。

=> CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));
=> CREATE INDEX

この場合、SqlAlchemy の "execute" コマンドを使用してインデックスを作成するにはどうすればよいですか?

4

1 に答える 1

0

「難しい」解決策が1つ見つかりました。トランザクションとセッションのメカニズムを使用せずに実行する場合:

DBSession.bind.engine.execute(sql)

および SqlAlchemy ログ:

INFO CREATE INDEX my_index ON my_table USING gin ((jsonb_field -> 'jsonb_key'));
INFO {}
INFO COMMIT

およびインデックスがデータベースに作成されました-使用して確認しpsqlました。

于 2015-05-19T15:25:23.893 に答える