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.
feature1;feature2
feature1, feature2
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
),
]