Операции по миграции базы данных¶
Все эти operations доступны из модуля django.contrib.postgres.operations.
Создание расширения с помощью миграций¶
Вы можете создать расширение PostgreSQL в своей базе данных с помощью файла миграции. В данном примере создается расширение hstore, но те же принципы применимы и к другим расширениям.
Настройте расширение hstore в PostgreSQL перед первой операцией CreateModel или AddField, которая включает HStoreField, добавив миграцию с операцией HStoreExtension. Например:
from django.contrib.postgres.operations import HStoreExtension
class Migration(migrations.Migration):
...
operations = [
HStoreExtension(),
...
]
Операция пропускает добавление расширения, если оно уже существует.
Для большинства расширений это требует пользователя базы данных с привилегиями суперпользователя. Если пользователь базы данных Django не имеет соответствующих привилегий, вам придется создать расширение вне Django migrations с пользователем, у которого они есть. В этом случае подключитесь к вашей базе данных Django и выполните запрос CREATE EXTENSION IF NOT EXISTS hstore;.
В старых версиях предварительное существование расширения не проверяется.
CreateExtension¶
-
class
CreateExtension(name)[исходный код]¶ Подкласс
Operation, который устанавливает расширение PostgreSQL. Для обычных расширений используйте один из более специфических подклассов ниже.-
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.
Управление коллациями с помощью миграций¶
Если вам нужно отфильтровать или упорядочить столбец, используя определенную коллизию, которую предоставляет ваша операционная система, но не предоставляет PostgreSQL, вы можете управлять коллизиями в вашей базе данных с помощью файла миграции. Затем эти колации можно использовать с параметром db_collation в CharField, TextField и их подклассах.
Например, чтобы создать колляцию для упорядочивания немецкой телефонной книги:
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)[исходный код]¶ Создает collation с заданными значениями
name,localeиprovider.Установите параметр
deterministicв значениеFalseдля создания недетерминированной свертки, например, для фильтрации без учета регистра.
-
class
RemoveCollation(name, locale, *, provider='libc', deterministic=True)[исходный код]¶ Удаляет колляции с именем
name.При реверсировании создается коллация с предоставленными аргументами
locale,providerиdeterministic. Поэтому для того, чтобы сделать эту операцию обратимой, требуетсяlocale.
Ограничения
PostgreSQL 9.6 поддерживает только провайдер 'libc'.
Недетерминированные колляции поддерживаются только в PostgreSQL 12+.
Одновременные операции с индексами¶
PostgreSQL поддерживает опцию CONCURRENTLY к операторам CREATE INDEX и DROP INDEX для добавления и удаления индексов без блокировки записи. Эта опция полезна для добавления или удаления индекса в живой производственной базе данных.
-
class
AddIndexConcurrently(model_name, index)[исходный код]¶ Как
AddIndex, но создает индекс с помощью опцииCONCURRENTLY. При использовании этой опции есть несколько предостережений, о которых следует знать, см. the PostgreSQL documentation of building indexes concurrently.
-
class
RemoveIndexConcurrently(model_name, name)[исходный код]¶ Как
RemoveIndex, но удаляет индекс с опциейCONCURRENTLY. При использовании этой опции есть несколько предостережений, о которых следует знать, см. the PostgreSQL documentation.
Примечание
Опция CONCURRENTLY не поддерживается внутри транзакции (см. non-atomic migration).