Операции миграции базы данных
Все эти операции доступны из модуля 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 от имени пользователя, у которого они есть. В этом случае подключитесь к базе данных Django и выполните запрос CREATE EXTENSION IF NOT EXISTS hstore;.
CreateExtension
-
class CreateExtension(name, hints=None)[исходный код] -
Подкласс
Operation, устанавливающий расширение PostgreSQL. Для распространённых расширений используйте один из более специализированных подклассов ниже.-
name -
Это обязательный аргумент. Имя устанавливаемого расширения.
-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
BloomExtension
-
class BloomExtension(hints=None)[исходный код] -
Устанавливает расширение
bloom.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
BtreeGinExtension
-
class BtreeGinExtension(hints=None)[исходный код] -
Устанавливает расширение
btree_gin.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
BtreeGistExtension
-
class BtreeGistExtension(hints=None)[исходный код] -
Устанавливает расширение
btree_gist.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
CITextExtension
-
class CITextExtension(hints=None)[исходный код] -
Устанавливает расширение
citext.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
CryptoExtension
-
class CryptoExtension(hints=None)[исходный код] -
Устанавливает расширение
pgcrypto.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
HStoreExtension
-
class HStoreExtension(hints=None)[исходный код] -
Устанавливает расширение
hstore, а также настраивает соединение для интерпретации данных hstore, чтобы их можно было использовать в последующих миграциях.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
TrigramExtension
-
class TrigramExtension(hints=None)[исходный код] -
Устанавливает расширение
pg_trgm.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
UnaccentExtension
-
class UnaccentExtension(hints=None)[исходный код] -
Устанавливает расширение
unaccent.-
hints -
Добавлено в Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsметодуallow_migrate()маршрутизаторов баз данных, чтобы помочь им принимать решения о маршрутизации.
-
Управление правилами сортировки с помощью миграций
Если вам нужно фильтровать или упорядочивать столбец с помощью определённого правила сортировки, предоставляемого вашей операционной системой, но не 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, позволяющий добавлять ограничения-проверки без проверки существующих строк. Этот параметр полезен, если вы хотите избежать потенциально длительного сканирования таблицы для проверки соответствия всех существующих строк ограничению.
Чтобы позднее проверить ограничения-проверки, созданные с параметром 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/6.0/ref/contrib/postgres/operations/