Home > Net >  Creating a GIN index in Django
Creating a GIN index in Django

Time:11-26

I have created a model in Django.

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

There are several possible ways to store the data in the feature field. Some examples below.

  1. feature1;feature2
  2. feature1, feature2
  3. feature1,feature2

And so on. I need to create a GIN index for that field. I would probably do it in postgreSQL in the following way

CREATE INDEX features_search_idx ON "mymodel" USING gin (regexp_split_to_array("mymodel"."features", E'[,;\\s] '));

Would it be possible to do the same thing by a migration?

CodePudding user response:

Yes.

  • Create an empty migration: python manage.py makemigration yourapp --empty -n pour_gin
  • Add a migrations.RunSQL() operation in the migration file.
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
        ),
    ]
  • Related