数据库迁移操作
所有这些 操作 都可以从 django.contrib.postgres.operations
模块中获得。
使用迁移创建扩展
你可以使用迁移文件在数据库中创建一个 PostgreSQL 扩展。这个例子创建了一个 hstore 扩展,但同样的原理也适用于其他扩展。
在涉及到 HStoreField
的第一个 CreateModel
或 AddField
操作之前,通过添加 HStoreExtension
操作的迁移,在 PostgreSQL 中设置 hstore 扩展。例如:
from django.contrib.postgres.operations import HStoreExtension
class Migration(migrations.Migration):
...
operations = [
HStoreExtension(),
...
]
The operation skips adding the extension if it already exists.
对于大多数扩展来说,这需要一个具有超级用户权限的数据库用户。如果 Django 数据库的用户没有相应的权限,你就必须在 Django 迁移之外用一个有权限的用户创建扩展。在这种情况下,连接到你的 Django 数据库,并运行查询 CREATE EXTENSION IF NOT EXISTS hstore;
。
Changed in Django Development version:
In older versions, the pre-existence of the extension isn’t checked.
CreateExtension
class CreateExtension
(name)
一个安装 PostgreSQL 扩展的 Operation
子类。对于普通的扩展,请使用下面一个更具体的子类。
name
这是一个必要的参数。要安装的扩展名。
BloomExtension
class BloomExtension
New in Django 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
扩展。
Managing collations using migrations
New in Django Development version.
If you need to filter or order a column using a particular collation that your operating system provides but PostgreSQL does not, you can manage collations in your database using a migration file. These collations can then be used with the db_collation
parameter on CharField
, TextField
, and their subclasses.
For example, to create a collation for German phone book ordering:
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*)
Creates a collation with the given name
, locale
and provider
.
Set the deterministic
parameter to False
to create a non-deterministic collation, such as for case-insensitive filtering.
class RemoveCollation
(name, locale, **, provider=’libc’, deterministic=True*)
Removes the collations named name
.
When reversed this is creating a collation with the provided locale
, provider
, and deterministic
arguments. Therefore, locale
is required to make this operation reversible.
Restrictions
PostgreSQL 9.6 only supports the 'libc'
provider.
Non-deterministic collations are supported only on PostgreSQL 12+.
并发索引操作
PostgreSQL 支持 CREATE INDEX
和 DROP INDEX
语句中的 CONCURRENTLY
选项,以增加和删除索引而不锁定写入。这个选项对于在实际生产的数据库中添加或删除索引非常有用。
class AddIndexConcurrently
(model_name, index)
就像 AddIndex
一样,但是使用 CONCURRENTLY
选项创建索引。这在使用这个选项时有一些注意事项,参见 PostgreSQL 关于并发建立索引的文档 。
class RemoveIndexConcurrently
(model_name, name)
就像 RemoveIndex
一样,但是使用 CONCURRENTLY
选项来删除索引。这在使用这个选项时有一些注意事项,请看 PostgreSQL 文档 。
注解
在事务中不支持 CONCURRENTLY
选项(见 非原子性迁移)。