Я хотел бы использовать следующий необработанный SQL для создания индекса в PostgreSQL:
CREATE INDEX ix_action_date ON events_map ((action ->> 'action'), date, map_id);
Я попытался поместить эту строку в часть __table_args__
класса модели, но не смог. Затем я просто решил это, используя необработанный SQL в миграции Alembic.
conn = op.get_bind()
conn.execute(text("CREATE INDEX ..."))
и просто используя фиктивный индекс в __table_args__
, например:
Index('ix_action_date')
Моя единственная проблема заключается в том, что Alembic не принимает фиктивный индекс с тем же именем, и каждый раз, когда я запускаю revision --autogenerate
, он сообщает мне следующее:
SAWarning: Skipped unsupported reflection of expression-based index ix_action_date
% idx_name)
а затем добавляет автоматически сгенерированный индекс в файл миграции:
op.create_index('ix_action_date', 'events_map', [], unique=False)
Мой вопрос:
Как я могу записать необработанный SQL в индекс
__table_args__
?Как я могу действительно заставить мою концепцию фиктивного индекса работать? Я имею в виду индекс, который сравнивается только по имени?
__table_args__
класса модели, но не смог? Это похоже на проблему XY. - person Ilja Everilä   schedule 09.07.2018Index
в аргументах вашей таблицы, не говоря уже о фиктивном. - person Ilja Everilä   schedule 09.07.2018Skipped unsupported reflection of expression-based index
для каждого--autogenerate
. - person hyperknot   schedule 09.07.2018Index
для выражения столбца json (b) и остальных должно было быть возможным. - person Ilja Everilä   schedule 09.07.2018