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