データベースのマイグレーション・オペレーションLink to this heading

これらの マイグレーションオペレーション は全て django.contrib.postgres.operations モジュールから利用できます。

マイグレーションを使って拡張機能を作成するLink to this heading

マイグレーションファイルを使用して、データベースにPostgreSQL拡張を作成できます。この例ではhstore拡張を作成しますが、他の拡張にも同じ原則が適用されます。

HStoreField を使用する最初の CreateModel または AddField オペレーションの前に、PostgreSQL で hstore 拡張機能を設定するために、 HStoreExtension オペレーションを含むマイグレーションを追加してください。たとえば:

Code
from django.contrib.postgres.operations import HStoreExtension


class Migration(migrations.Migration):
    ...

    operations = [HStoreExtension(), ...]

オペレーションは、拡張機能がすでに存在する場合は追加しないようにスキップします。

ほとんどの拡張機能には、スーパーユーザー権限を持つデータベースユーザーが必要です。Djangoのデータベースユーザーに適切な権限がない場合は、それらの権限を持つユーザーでDjangoのマイグレーション外で拡張機能を作成する必要があります。その場合、Djangoデータベースに接続してクエリ CREATE EXTENSION IF NOT EXISTS hstore; を実行してください。

CreateExtensionLink to this heading

class CreateExtension(name, hints=None)Link to this definition

PostgreSQL拡張モジュールをインストールする Operation サブクラスです。一般的な拡張モジュールについては、以下のサブクラスのいずれかを使用してください。

nameLink to this definition

これは必須の引数です。インストールする拡張機能の名前です。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

BloomExtensionLink to this heading

class BloomExtension(hints=None)Link to this definition

bloom 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

BtreeGinExtensionLink to this heading

class BtreeGinExtension(hints=None)Link to this definition

btree_gin 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

BtreeGistExtensionLink to this heading

class BtreeGistExtension(hints=None)Link to this definition

btree_gist 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

CITextExtensionLink to this heading

class CITextExtension(hints=None)Link to this definition

citext 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

CryptoExtensionLink to this heading

class CryptoExtension(hints=None)Link to this definition

pgcrypto 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

HStoreExtensionLink to this heading

class HStoreExtension(hints=None)Link to this definition

hstore 拡張機能をインストールし、後続のマイグレーションで hstore データを解釈するための接続を設定します。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

TrigramExtensionLink to this heading

class TrigramExtension(hints=None)Link to this definition

pg_trgm 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

UnaccentExtensionLink to this heading

class UnaccentExtension(hints=None)Link to this definition

unaccent 拡張機能をインストールします。

hintsLink to this definition

The optional hints argument will be passed as **hints to the allow_migrate() method of database routers to assist them in making routing decisions.

マイグレーションを使って照合順序 (collation) を管理するLink to this heading

OSでは提供されているが PostgreSQL では提供されていない特定の照合順序を使用してカラムをフィルタリングしたり並べ替えたりする必要がある場合、マイグレーションファイルを使ってデータベース内の照合順序を管理できます。これらの照合順序は、 CharField, TextField やそのサブクラスの db_collation パラメータで使用できます。

例えば、ドイツ語の電話帳順に並べ替えるための照合順序を作成するには、次のようにします:

Code
from django.contrib.postgres.operations import CreateCollation


class Migration(migrations.Migration):
    ...

    operations = [
        CreateCollation(
            "case_insensitive",
            provider="icu",
            locale="und-u-ks-level2",
            deterministic=False,
        ),
        ...,
    ]
class CreateCollation(name, locale, *, provider='libc', deterministic=True)Link to this definition

与えられた namelocale、および provider で照合順序を作成します。

大文字小文字を区別しないフィルタリングなど、非決定的な照合順序を作成するには、 deterministic パラメータを False に設定します。

class RemoveCollation(name, locale, *, provider='libc', deterministic=True)Link to this definition

name という照合順序を削除します。

逆順にすると、指定された localeprovider、そして deterministic 引数を使用して照合順序を作成します。したがって、この操作を逆にするには locale が必要です。

インデックスの並列操作Link to this heading

PostgreSQLでは、CREATE INDEXDROP INDEX 文の CONCURRENTLY オプションをサポートしており、書き込みをロックせずにインデックスを追加したり削除したりすることができます。このオプションは、稼働中のデータベースでインデックスを追加したり削除したりする場合に便利です。

class AddIndexConcurrently(model_name, index)Link to this definition

AddIndex と似ていますが、CONCURRENTLY オプションを使用してインデックスを作成します。このオプションを使用する際に注意すべきいくつかの注意事項があります。このオプションの使用に関する詳細は、PostgreSQL の indexes concurrently をビルドするためのドキュメント を参照してください。

class RemoveIndexConcurrently(model_name, name)Link to this definition

RemoveIndex と似ていますが、CONCURRENTLY オプションを使用してインデックスを削除します。このオプションを使用する際に留意すべきいくつかの注意点があります。詳細は、PostgreSQLのドキュメント を参照してください。

検証を強制しない制約を追加するLink to this heading

PostgreSQL は NOT VALID オプションを ADD CONSTRAINT 文でサポートしており、既存の行の検証を行わずに検査制約を追加できます。このオプションは、既存のすべての行が制約を満たすかどうかを確認するためにテーブルをスキャンする手間を省きたい場合に便利です。

NOT VALID オプションで作成されたチェック制約を後から検証するには、 ValidateConstraint 操作を使用してください。

詳細については、PostgreSQL のドキュメント を参照してください。

class AddConstraintNotValid(model_name, constraint)Link to this definition

AddConstraint に似ていますが、既存の行に対して制約を検証しないものです。

class ValidateConstraint(model_name, name)Link to this definition

テーブルをスキャンし、既存の行にある指定のチェック制約を検証します。