web-dev-qa-db-ja.com

Django移行でGINインデックスを作成する方法

Djangoでは、バージョン1.11以降、PostgreSQL GinIndexhttps://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/ )のクラスがあります。テーブルの1つに追加したVectorSearchFieldにそのようなインデックスを構築する移行を作成したいと思います。これまで、_db_index=True_をVectorSearchFieldに単純に追加しようとしましたが、Bツリーインデックス(私は思う)と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 ..._クエリを実行するのが最善の方法ですか?

12
Maciek

古い手動のCREATEINDEXコードを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'])]

必要なものです。生のSQLCREATEINDEXステートメントはもう使用する必要はありません

17
e4c5