Я вручную создал индекс GIN для таблицы Postgres следующим образом:
create index idx_ib_keywords on stuff using gin(to_tsvector('english'::regconfig, keywords));
Он прекрасно создан:
\d stuff
Table stuff
Column | Type | Collation | Nullable | Default
------------+--------+-----------+----------+--------
.
.
.
keywords | text | | not null |
.
.
.
Indexes:
.
. "idx_ib_keywords" gin (to_tsvector('english'::regconfig, keywords))
Теперь я использую alembic для миграций.Когда я автоматически генерирую миграцию с помощью alembic, индекс GIN НЕ генерируется автоматически.Не беспокойтесь, автоматический генератор не должен быть идеальным.Поэтому я хочу пойти и отредактировать файл миграции вручную.
Я искал, как это сделать, и самое близкое, что я мог найти, было эта страница , за которой я следовал, инаписал
op.create_index(op.f('idx_ib_keywords'), 'stuff', ['keywords'], postgresql_using='gin')
в мой скрипт миграции.Когда я применяю эту миграцию, я получаю сообщение об ошибке:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.UndefinedObject) Тип текста данных не имеет класса оператора по умолчанию для метода доступа "gin". ПОДСКАЗКА: Вынеобходимо указать класс оператора для индекса или определить класс оператора по умолчанию для типа данных.
Это отличное сообщение об ошибке;это говорит мне, что я должен сделать вещь to_tsvector
.Однако я не знаю, как это сделать в SQLAlchemy.
Есть ли простой способ написать это в SQLAlchemy, или мне нужно перейти на необработанный SQL в файле миграции?