Операции миграции базы данных
Все эти операции доступны из модуля 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 его не имеет, вы можете управлять наборами правил сортировки в базе данных с помощью файла миграции. Эти наборы правил сортировки затем могут быть использованы с параметром 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] -
Просматривает таблицу и проверяет заданное проверочное ограничение на существующих строках.
Примечание
Операции AddConstraintNotValid и ValidateConstraint должны выполняться в двух отдельных миграциях. Выполнение обеих операций в одной атомарной миграции имеет тот же эффект, что и AddConstraint, в то время как выполнение их в одной неатомарной миграции может привести к несогласованному состоянию вашей базы данных, если операция ValidateConstraint завершится неудачно.
© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.2/ref/contrib/postgres/operations/