Создание индекса GIN в Django
Я создал модель в Django.
class MyModel(models.Model):
features = TextField(blank=True, default='')
Существует несколько возможных способов хранения данных в поле feature
. Некоторые примеры приведены ниже.
feature1;feature2
feature1, feature2
feature1,feature2
И так далее. Мне нужно создать GIN-индекс для этого поля. В postgreSQL я бы сделал это следующим образом
CREATE INDEX features_search_idx ON "mymodel" USING gin (regexp_split_to_array("mymodel"."features", E'[,;\\s]+'));
Можно ли сделать то же самое с помощью миграции?
Да.
- Создайте пустую миграцию:
python manage.py makemigration yourapp --empty -n pour_gin
- Добавьте операцию
migrations.RunSQL()
в файл миграции.
class Migration(migrations.Migration):
dependencies = [
# ...
]
operations = [
migrations.RunSQL(
sql="""CREATE INDEX features_search_idx ON "mymodel" USING gin (regexp_split_to_array("mymodel"."features", E'[,;\\s]+'));""",
reverse_sql=migrations.RunSQL.noop, # TODO: replace me with DROP INDEX
),
]