/ / Django माइग्रेशन में जीआईएन इंडेक्स कैसे बनाएं - django, postgresql, अनुक्रमण, माइग्रेशन, django-migrations

Django माइग्रेशन में जीआईएन इंडेक्स कैसे बनाएं - django, postgresql, अनुक्रमण, माइग्रेशन, django-migrations

Django में, संस्करण 1.11 के बाद से हमारे पास PostgreSQL के लिए एक कक्षा है GinIndex (https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/)। मैं एक माइग्रेशन बनाना चाहता हूं जो इस तरह के इंडेक्स को बनाता है VectorSearchField मैंने अपनी एक टेबल में जोड़ा। अब तक, मैंने बस जोड़ने की कोशिश की है db_index=True को VectorSearchField, लेकिन यह विफल रहता है, क्योंकि यह बी-ट्री इंडेक्स (मुझे लगता है) और बनाने की कोशिश करता है VectorSearchField मूल्य बहुत लंबा है।

मैं एक रन बनाकर इंडेक्स बनाना चाहता हूं migrations.RunSQL() के साथ प्रवासन:

CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);

हालांकि, मुझे लगता है, क्योंकि एक विशेष है GinIndex Django में कक्षा, शायद कच्चे एसक्यूएल निष्पादित किए बिना ऐसी अनुक्रमणिका बनाने का एक तरीका है?

यहां एक मॉडल वर्ग है:

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 ... सबसे अच्छा तरीका पूछो?

उत्तर:

उत्तर № 1 के लिए 10

हेवन को अभी तक अपने पुराने मैनुअल 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"])]

क्या आवश्यक है। कच्चे एसक्यूएल CREATE INDEX कथन का उपयोग अब और नहीं किया जाना चाहिए