Mac*_*iek 11 migration django postgresql indexing django-migrations
在Django中,从版本1.11开始,我们有一个PostgreSQL类GinIndex(https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/).我想创建一个迁移,在VectorSearchField我添加到我的一个表中构建这样的索引.到目前为止,我试图简单地添加db_index=True到VectorSearchField,但失败了,因为它试图创建一个B树索引(我认为),并且VectorSearchField值太长.
我设法通过运行migrations.RunSQL()迁移来创建我想要的索引:
CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
Run Code Online (Sandbox Code Playgroud)
但是,我想,因为GinIndexDjango中有一个特殊的类,也许有一种方法可以在不执行原始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.
Run Code Online (Sandbox Code Playgroud)
知道如何sv在迁移中正确创建字段索引吗?或者CREATE INDEX ...以最佳方式执行查询?
e4c*_*4c5 19
还没有机会将我的旧手动CREATE INDEX代码迁移到1.11中引入的新系统,但我的理解是
from django.contrib.postgres.indexes import GinIndex
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)
class Meta:
indexes = [GinIndex(fields=['sv'])]
Run Code Online (Sandbox Code Playgroud)
是什么需要.不再需要使用原始SQL CREATE INDEX语句
| 归档时间: |
|
| 查看次数: |
3260 次 |
| 最近记录: |