在 Django 中创建 GIN 索引
Creating a GIN index in 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
),
]
我已经在 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
),
]