Создание индекса GIN в Django

Я создал модель в Django.

class MyModel(models.Model):
    features = TextField(blank=True, default='')

Существует несколько возможных способов хранения данных в поле feature. Некоторые примеры приведены ниже.

  1. feature1;feature2
  2. feature1, feature2
  3. 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
        ),
    ]
Вернуться на верх