Операции миграции базы данных
Все эти операции доступны в модуле django.contrib.postgres.operations.
Создание расширений PostgreSQL с помощью миграций
Вы можете создать расширение PostgreSQL в своей базе данных с помощью файла миграции. Этот пример создает расширение hstore, но те же принципы применимы и к другим расширениям.
Настройте расширение 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
-
class CreateExtension(name) -
Подкласс
Operation, который устанавливает расширение PostgreSQL. Для общих расширений используйте один из более конкретных подклассов ниже.-
name -
Это обязательный аргумент. Название расширения, которое необходимо установить.
-
BloomExtension
-
class BloomExtension -
Устанавливает расширение
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 с помощью миграций
Если вам нужно отфильтровать или отсортировать столбец по определенному набору правил сортировки, который предоставляет ваша операционная система, но 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) -
Создает набор правил сортировки с заданным
name,localeиprovider.Установите параметр
deterministicвFalse, чтобы создать недетерминированный набор правил сортировки, например, для фильтрации без учета регистра.
-
class RemoveCollation(name, locale, *, provider='libc', deterministic=True) -
Удаляет наборы правил сортировки с именем
name.При обратном выполнении этой операции создается набор правил сортировки с предоставленными аргументами
locale,provider, иdeterministic. Поэтомуlocaleтребуется для обратимости этой операции.
Ограничения
Недетерминированные наборы правил сортировки поддерживаются только в PostgreSQL 12+.
Операции с индексами в режиме одновременного доступа
PostgreSQL поддерживает опцию CONCURRENTLY для операторов CREATE INDEX и DROP INDEX для добавления и удаления индексов без блокировки записей. Эта опция полезна для добавления или удаления индекса в активной базе данных.
-
class AddIndexConcurrently(model_name, index) -
Подобно
AddIndex, но создает индекс с опциейCONCURRENTLY. При использовании этой опции есть несколько нюансов, ознакомьтесь с документацией PostgreSQL по созданию индексов в режиме одновременного доступа.
-
class RemoveIndexConcurrently(model_name, name) -
Подобно
RemoveIndex, но удаляет индекс с опциейCONCURRENTLY. При использовании этой опции есть несколько нюансов, ознакомьтесь с документацией PostgreSQL.
Примечание
Опция CONCURRENTLY не поддерживается внутри транзакции (см. неатомарные миграции).
Добавление ограничений без проверки валидности
PostgreSQL поддерживает опцию NOT VALID с оператором ADD CONSTRAINT для добавления проверочных ограничений без проверки валидности существующих строк. Эта опция полезна, если вы хотите пропустить потенциально длительный поиск по таблице для проверки того, что все существующие строки удовлетворяют ограничению.
Для проверки проверочных ограничений, созданных с помощью опции NOT VALID, в более поздний момент времени используйте операцию ValidateConstraint.
См. документацию PostgreSQL для получения дополнительной информации.
-
class AddConstraintNotValid(model_name, constraint) -
Подобно
AddConstraint, но избегает проверки ограничения на существующие строки.
-
class ValidateConstraint(model_name, name) -
Проходит по таблице и проверяет заданное проверочное ограничение на существующие строки.
Примечание
Операции AddConstraintNotValid и ValidateConstraint следует выполнять в двух отдельных миграциях. Выполнение обеих операций в одной атомарной миграции имеет тот же эффект, что и AddConstraint, а выполнение их в одной неатомарной миграции может привести к несогласованному состоянию базы данных, если операция ValidateConstraint завершится неудачно.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/4.1/ref/contrib/postgres/operations/