在 Django 中创建 GIN 索引

Creating a GIN index in 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
        ),
    ]