データベース移行操作
これらの操作はすべて、django.contrib.postgres.operations
モジュールから利用できます。
移行を使用した拡張機能の作成
移行ファイルを使用して、データベースにPostgreSQL拡張機能を作成できます。 この例ではhstore拡張機能を作成しますが、他の拡張機能にも同じ原則が適用されます。
HStoreExtension 操作で移行を追加することにより、 HStoreField を含む最初のCreateModel
またはAddField
操作の前にPostgreSQLでhstore拡張機能を設定します。 例えば:
from django.contrib.postgres.operations import HStoreExtension
class Migration(migrations.Migration):
...
operations = [
HStoreExtension(),
...
]
拡張機能がすでに存在する場合、操作は拡張機能の追加をスキップします。
ほとんどの拡張機能では、これにはスーパーユーザー権限を持つデータベースユーザーが必要です。 Djangoデータベースユーザーが適切な権限を持っていない場合は、それらを持っているユーザーを使用して、Django移行の外部で拡張機能を作成する必要があります。 その場合は、Djangoデータベースに接続して、クエリCREATE EXTENSION IF NOT EXISTS hstore;
を実行します。
バージョン3.2で変更:古いバージョンでは、拡張機能の存在はチェックされません。
CreateExtension
- class CreateExtension(name)
- PostgreSQL拡張機能をインストールする
Operation
サブクラス。 一般的な拡張機能については、以下のより具体的なサブクラスの1つを使用してください。
- name
- これは必須の引数です。 インストールする拡張機能の名前。
BloomExtension
- class BloomExtension
バージョン3.1の新機能。
bloom
拡張機能をインストールします。
BtreeGinExtension
- class BtreeGinExtension
btree_gin
拡張機能をインストールします。
BtreeGistExtension
- class BtreeGistExtension
btree_gist
拡張機能をインストールします。
CITextExtension
- class CITextExtension
citext
拡張機能をインストールします。
CryptoExtension
- class CryptoExtension
pgcrypto
拡張機能をインストールします。
HStoreExtension
- class HStoreExtension
hstore
拡張機能をインストールし、その後の移行で使用できるようにhstoreデータを解釈するための接続もセットアップします。
TrigramExtension
- class TrigramExtension
pg_trgm
拡張機能をインストールします。
UnaccentExtension
- class UnaccentExtension
unaccent
拡張機能をインストールします。
移行を使用した照合の管理
バージョン3.2の新機能。
オペレーティングシステムが提供する特定の照合を使用して列をフィルタリングまたは順序付けする必要があるが、PostgreSQLは提供しない場合は、移行ファイルを使用してデータベース内の照合を管理できます。 これらの照合は、 CharField 、 TextField 、およびそれらのサブクラスのdb_collation
パラメーターで使用できます。
たとえば、ドイツの電話帳注文の照合を作成するには、次のようにします。
from django.contrib.postgres.operations import CreateCollation
class Migration(migrations.Migration):
...
operations = [
CreateCollation(
'german_phonebook',
provider='icu',
locale='und-u-ks-level2',
),
...
]
- class CreateCollation(name, locale, *, provider='libc', deterministic=True)
指定された
name
、locale
、およびprovider
との照合を作成します。deterministic
パラメーターをFalse
に設定して、大文字と小文字を区別しないフィルタリングなど、非決定論的な照合を作成します。
- class RemoveCollation(name, locale, *, provider='libc', deterministic=True)
name
という名前の照合を削除します。逆にすると、これは、提供された
locale
、provider
、およびdeterministic
引数との照合を作成します。 したがって、この操作を元に戻すには、locale
が必要です。
制限
PostgreSQL 9.6は、'libc'
プロバイダーのみをサポートします。
非決定論的照合は、PostgreSQL12以降でのみサポートされます。
並行インデックス操作
PostgreSQLは、CREATE INDEX
およびDROP INDEX
ステートメントのCONCURRENTLY
オプションをサポートして、書き込みをロックアウトせずにインデックスを追加および削除します。 このオプションは、実稼働データベースでインデックスを追加または削除する場合に役立ちます。
- class AddIndexConcurrently(model_name, index)
- AddIndex と同様ですが、
CONCURRENTLY
オプションを使用してインデックスを作成します。 これには、このオプションを使用するときに注意すべきいくつかの注意事項があります。インデックスの同時構築に関するPostgreSQLのドキュメントを参照してください。
- class RemoveIndexConcurrently(model_name, name)
- RemoveIndex と同様ですが、
CONCURRENTLY
オプションを使用してインデックスを削除します。 このオプションを使用する際に注意すべきいくつかの注意事項があります。 PostgreSQLのドキュメントを参照してください。