Операции миграции базы данных
Все эти операции доступны из модуля 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(
"case_insensitive",
provider="icu",
locale="und-u-ks-level2",
deterministic=False,
),
...,
]
-
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 поддерживает опцию 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 для добавления ограничений CHECK без проверки валидности на существующих строках. Эта опция полезна, если вы хотите пропустить потенциально длительную проверку таблицы, чтобы убедиться, что все существующие строки удовлетворяют ограничению.
Для проверки ограничений CHECK, созданных с опцией NOT VALID, впоследствии используйте операцию ValidateConstraint.
См. документацию PostgreSQL для получения дополнительной информации.
-
class AddConstraintNotValid(model_name, constraint) -
Аналогично
AddConstraint, но избегает проверки ограничения на существующие строки.
-
class ValidateConstraint(model_name, name) -
Проверяет таблицу и валидирует данное ограничение CHECK на существующих строках.
Примечание
Операции AddConstraintNotValid и ValidateConstraint следует выполнять в двух отдельных миграциях. Выполнение обеих операций в одной атомарной миграции имеет тот же эффект, что и AddConstraint, в то время как выполнение их в одной неатомарной миграции может оставить вашу базу данных в несогласованном состоянии, если операция ValidateConstraint завершится неудачно.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.0/ref/contrib/postgres/operations/