データベースのマイグレーション・オペレーション¶
これらの マイグレーションオペレーション は全て django.contrib.postgres.operations モジュールから利用できます。
マイグレーションを使って拡張機能を作成する¶
マイグレーションファイルを使用して、データベースにPostgreSQL拡張を作成できます。この例ではhstore拡張を作成しますが、他の拡張にも同じ原則が適用されます。
HStoreField を使用する最初の CreateModel または AddField オペレーションの前に、PostgreSQL で hstore 拡張機能を設定するために、 HStoreExtension オペレーションを含むマイグレーションを追加してください。たとえば:
from django.contrib.postgres.operations import HStoreExtension
class Migration(migrations.Migration):
...
operations = [HStoreExtension(), ...]
オペレーションは、拡張機能がすでに存在する場合は追加しないようにスキップします。
ほとんどの拡張機能には、スーパーユーザー権限を持つデータベースユーザーが必要です。Djangoのデータベースユーザーに適切な権限がない場合は、それらの権限を持つユーザーでDjangoのマイグレーション外で拡張機能を作成する必要があります。その場合、Djangoデータベースに接続してクエリ CREATE EXTENSION IF NOT EXISTS hstore; を実行してください。
CreateExtension¶
BloomExtension¶
BtreeGinExtension¶
BtreeGistExtension¶
CITextExtension¶
CryptoExtension¶
HStoreExtension¶
TrigramExtension¶
UnaccentExtension¶
マイグレーションを使って照合順序 (collation) を管理する¶
OSでは提供されているが PostgreSQL では提供されていない特定の照合順序を使用してカラムをフィルタリングしたり並べ替えたりする必要がある場合、マイグレーションファイルを使ってデータベース内の照合順序を管理できます。これらの照合順序は、 CharField, TextField やそのサブクラスの db_collation パラメータで使用できます。
例えば、ドイツ語の電話帳順に並べ替えるための照合順序を作成するには、次のようにします:
from django.contrib.postgres.operations import CreateCollation
class Migration(migrations.Migration):
...
operations = [
CreateCollation(
"case_insensitive",
provider="icu",
locale="und-u-ks-level2",
deterministic=False,
),
...,
]
インデックスの並列操作¶
PostgreSQLでは、CREATE INDEX と DROP INDEX 文の CONCURRENTLY オプションをサポートしており、書き込みをロックせずにインデックスを追加したり削除したりすることができます。このオプションは、稼働中のデータベースでインデックスを追加したり削除したりする場合に便利です。
- class AddIndexConcurrently(model_name, index)[ソース]¶
AddIndexと似ていますが、CONCURRENTLYオプションを使用してインデックスを作成します。このオプションを使用する際に注意すべきいくつかの注意事項があります。このオプションの使用に関する詳細は、PostgreSQL の indexes concurrently をビルドするためのドキュメント を参照してください。
- class RemoveIndexConcurrently(model_name, name)[ソース]¶
RemoveIndexと似ていますが、CONCURRENTLYオプションを使用してインデックスを削除します。このオプションを使用する際に留意すべきいくつかの注意点があります。詳細は、PostgreSQLのドキュメント を参照してください。
注釈
CONCURRENTLY オプションはトランザクション内でサポートされていません (詳細は non-atomic migration を参照してください)。
検証を強制しない制約を追加する¶
PostgreSQL は NOT VALID オプションを ADD CONSTRAINT 文でサポートしており、既存の行の検証を行わずに検査制約を追加できます。このオプションは、既存のすべての行が制約を満たすかどうかを確認するためにテーブルをスキャンする手間を省きたい場合に便利です。
NOT VALID オプションで作成されたチェック制約を後から検証するには、 ValidateConstraint 操作を使用してください。
詳細については、PostgreSQL のドキュメント を参照してください。
- class AddConstraintNotValid(model_name, constraint)[ソース]¶
AddConstraintに似ていますが、既存の行に対して制約を検証しないものです。
注釈
AddConstraintNotValid と ValidateConstraint のオペレーションは、2 つの別々のマイグレーションで実行する必要があります。同じアトミック マイグレーション内で両方の操作を実行すると AddConstraint クラスと同じ効果があります。一方、非アトミック マイグレーション内で操作を行うと、ValidateConstraint 操作が失敗した場合にデータベースが不整合の状態になる可能性があります。