Сеанс SqlAlchemy был определен как:
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
и было настроено:
DBSession.configure(bind=engine)
Base.metadata.bind = engine
И нужно создать индекс для поля jsonb, используя выполнение необработанного sql в транзакции:
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?