Issue
In Django, since version 1.11 we have a class for PostgreSQL GinIndex
(rel="noreferrer">https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/). I'd like to create a migration that constructs such index on a VectorSearchField
I added to one of my tables. So far, I've tried to simply add db_index=True
to the VectorSearchField
, but that fails, because it tries to create a B-Tree index (I think) and the VectorSearchField
values are too long.
I managed to create the index I want by running a migrations.RunSQL()
migration with:
CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
However, I guess, since there is a special GinIndex
class in Django, maybe there is a way to create such index without executing raw SQL?
Here's a model class:
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.
Any idea how to properly create an index for sv
field in a migration? Or is executing the CREATE INDEX ...
query the best way?
Solution
Haven't yet had a chance to migrate my old manual CREATE INDEX
codes to the new system introduced in 1.11
but my understanding is
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'])]
Is what's required. Raw SQL CREATE INDEX
statements need not be used any more.
Answered By - e4c5 Answer Checked By - Clifford M. (PHPFixing Volunteer)
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.