数据库迁移操作 — Django 文档

来自菜鸟教程
Django/docs/3.2.x/ref/contrib/postgres/operations
跳转至:导航、​搜索

数据库迁移操作

所有这些 操作 都可以从 django.contrib.postgres.operations 模块获得。

使用迁移创建扩展

您可以使用迁移文件在数据库中创建 PostgreSQL 扩展。 此示例创建了一个 hstore 扩展,但相同的原则适用于其他扩展。

通过添加带有 HStoreExtension 操作的迁移,在涉及 HStoreField 的第一个 CreateModelAddField 操作之前在 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 子类。 对于常见扩展,请使用以下更具体的子类之一。
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 没有的特定排序规则来过滤或排序列,则可以使用迁移文件管理数据库中的排序规则。 然后,这些排序规则可以与 CharFieldTextField 及其子类上的 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)

使用给定的 namelocaleprovider 创建排序规则。

deterministic 参数设置为 False 以创建非确定性排序规则,例如不区分大小写的过滤。

class RemoveCollation(name, locale, *, provider='libc', deterministic=True)

删除名为 name 的排序规则。

当相反时,这是使用提供的 localeproviderdeterministic 参数创建排序规则。 因此,需要 locale 使该操作可逆。

限制

PostgreSQL 9.6 仅支持 [X33X] 提供程序。

非确定性排序规则仅在 PostgreSQL 12+ 上受支持。


并发索引操作

PostgreSQL 支持 CREATE INDEXDROP INDEX 语句的 CONCURRENTLY 选项来添加和删除索引而不锁定写入。 此选项对于在实时生产数据库中添加或删除索引很有用。

class AddIndexConcurrently(model_name, index)
类似于 AddIndex,但使用 CONCURRENTLY 选项创建索引。 使用此选项时需要注意一些注意事项,请参阅 并发构建索引的 PostgreSQL 文档
class RemoveIndexConcurrently(model_name, name)
类似于 RemoveIndex,但使用 CONCURRENTLY 选项删除索引。 使用此选项时需要注意一些注意事项,请参阅 PostgreSQL 文档

笔记

事务内部不支持 CONCURRENTLY 选项(请参阅 非原子迁移 )。