所有这些 operations 可从 django.contrib.postgres.operations 模块。
可以使用迁移文件在数据库中创建PostgreSQL扩展。这个例子创建了一个hstore扩展,但同样的原则也适用于其他扩展。
在PostgreSQL中设置第一个 CreateModel 或 AddField 涉及的操作 HStoreField 通过添加迁移 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¶如果您需要使用操作系统提供的特定排序规则来过滤或排序列,但PostgreSQL不提供,则可以使用迁移文件管理数据库中的排序规则。这些排序规则然后可以与 db_collation 参数对 CharField , TextField ,及其子类。
例如,要创建德语电话簿订购的排序规则::
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支持 CONCURRENTLY 选项以 CREATE INDEX 和 DROP INDEX 用于添加和删除索引而不锁定写入的陈述。此选项对于在实时生产数据库中添加或删除索引很有用。
喜欢 AddIndex ,但用 CONCURRENTLY 选项.使用此选项时需要注意一些注意事项,请参阅 the PostgreSQL documentation of building indexes concurrently 。
喜欢 RemoveIndex ,但用 CONCURRENTLY 选项.使用此选项时需要注意一些注意事项,请参阅 the PostgreSQL documentation 。
备注
这个 CONCURRENTLY 事务内不支持选项(请参阅 non-atomic migration )。
PostgreSQL支持 NOT VALID 选项与 ADD CONSTRAINT 语句添加检查约束,而不对现有行强制验证。如果您希望跳过可能很长的表扫描以验证所有现有行是否满足约束,则此选项很有用。
属性创建的检查约束 NOT VALID 选项,请在以后使用 ValidateConstraint 手术。
看见 the PostgreSQL documentation 了解更多详细信息。
喜欢 AddConstraint ,但避免验证现有行上的约束。
备注
AddConstraintNotValid 和 ValidateConstraint 应在两个单独的迁移中执行操作。在同一原子迁移中执行这两个操作的效果与 AddConstraint ,而在单个非原子迁移中执行它们可能会使您的数据库处于不一致的状态,如果 ValidateConstraint 操作失败。
5月 28, 2025