【发布时间】:2017-10-03 06:55:42
【问题描述】:
在 Django 中,从 1.11 版开始,我们有一个用于 PostgreSQL 的类 GinIndex (https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/)。我想创建一个迁移,在我添加到我的一个表中的VectorSearchField 上构建这样的索引。到目前为止,我尝试简单地将db_index=True 添加到VectorSearchField,但是失败了,因为它试图创建一个B-Tree 索引(我认为)并且VectorSearchField 的值太长了。
我通过运行migrations.RunSQL() 迁移成功地创建了我想要的索引:
CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
不过,我想,既然 Django 中有一个特殊的 GinIndex 类,也许有一种方法可以在不执行原始 SQL 的情况下创建这样的索引?
这是一个模型类:
import django.contrib.postgres.search as pg_search
class EntryLine(models.Model):
speaker = models.CharField(max_length=512, db_index=True)
text = models.TextField()
sv = pg_search.SearchVectorField(null=True) # I want a GIN index on this field.
知道如何在迁移中为sv 字段正确创建索引吗?还是执行CREATE INDEX ... 查询是最好的方式?
【问题讨论】:
标签: django postgresql indexing migration django-migrations