/ / Djangoの移行でGINインデックスを作成する方法 - django、postgresql、indexing、migration、django-migrations

Djangoの移行でGINインデックスを作成する方法 - django、postgresql、indexing、migration、django-migrations

Djangoでは、バージョン1.11以降、PostgreSQL用のクラスがあります GinIndexhttps://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);

しかし、私は、 GinIndex Djangoのクラスでは、生の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 ... 最良の方法をクエリしますか?

回答:

回答№1の場合は10

Havenはまだ私の古いマニュアル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"])]

必要なのは何ですか?未加工のSQL CREATE INDEXステートメントをもう使用する必要はありません