Операции по миграции базы данных¶
Все эти операции доступны через модуль 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¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
BloomExtension¶
- class BloomExtension(hints=None)¶
Устанавливает расширение «bloom».
- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
CreateExtension¶
- class BtreeGinExtension(hints=None)¶
Устанавливает расширение btree_gin.
- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
CreateExtension¶
- class BtreeGistExtension(hints=None)¶
Устанавливает расширение btree_gist.
- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
CreateExtension¶
- class CITextExtension(hints=None)¶
Устанавливает расширение
citext.- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
CreateExtension¶
- class CryptoExtension(hints=None)¶
Устанавливает расширение
pgcrypto.- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
HStoreExtension¶
- class HStoreExtension(hints=None)¶
Устанавливает расширение hstore, а также настраивает соединение для интерпретации данных hstore для возможного использования при последующих миграциях.
- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
CreateExtension¶
- class TrigramExtension(hints=None)¶
Устанавливает расширение
pg_trgm.- hints¶
- New in Django 6.0.
Необязательный аргумент
hintsбудет передан как**hintsв методallow_migrate()маршрутизаторов базы данных, чтобы помочь им принимать решения о маршрутизации.
UnaccentExtension¶
- class UnaccentExtension(hints=None)¶
Устанавливает расширение unaccent.
- hints¶
- New in 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)¶
Создает сопоставление с заданным именем, локалью и поставщиком.
Установите для параметра
deterministicзначениеFalse, чтобы создать недетерминированные параметры сортировки, например, для фильтрации без учета регистра.
- class RemoveCollation(name, locale, *, provider='libc', deterministic=True)¶
Удаляет параметры сортировки с именем
name.В обратном порядке создается сопоставление с предоставленными аргументами
locale,providerидетерминированные. Следовательно, чтобы сделать эту операцию обратимой, требуетсяlocale.
Параллельные операции с индексами¶
PostgreSQL поддерживает опцию CONCURRENTLY для операторов CREATE INDEX и DROP INDEX для добавления и удаления индексов без блокировки записи. Эта опция полезна для добавления или удаления индекса в работающей рабочей базе данных.
- class AddIndexConcurrently(model_name, index)¶
Подобно
AddIndex, но создает индекс с опциейCONCURRENTLY. При использовании этой опции следует учитывать несколько предостережений: см. документацию PostgreSQL по одновременному построению индексов <https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY>`_.
- class RemoveIndexConcurrently(model_name, name)¶
Подобно
RemoveIndex, но индекс удаляется с помощью опцииCONCURRENTLY. При использовании этой опции следует учитывать несколько предостережений, см. документацию PostgreSQL.
Примечание
Опция CONCURRENTLY не поддерживается внутри транзакции (см. неатомарную миграцию).
Добавление ограничений без принудительной проверки¶
PostgreSQL поддерживает опцию NOT VALID с оператором ADD CONSTRAINT, позволяющую добавлять проверочные ограничения без принудительной проверки существующих строк. Эта опция полезна, если вы хотите пропустить потенциально длительное сканирование таблицы, чтобы убедиться, что все существующие строки удовлетворяют ограничению.
Чтобы позже проверить проверочные ограничения, созданные с опцией NOT VALID, используйте операцию ValidateConstraint.
Дополнительную информацию см. в документации PostgreSQL <https://www.postgresql.org/docs/current/sql-altertable.html#SQL-ALTERTABLE-NOTES>`__.
- class AddConstraintNotValid(model_name, constraint)¶
Подобно
AddConstraint, но позволяет избежать проверки ограничения для существующих строк.
- class ValidateConstraint(model_name, name)¶
Сканирует таблицу и проверяет заданное проверочное ограничение для существующих строк.
Примечание
Операции AddConstraintNotValid и ValidateConstraint должны выполняться в двух отдельных миграциях. Выполнение обеих операций в одной и той же атомарной миграции имеет тот же эффект, что и AddConstraint, тогда как выполнение их в одной неатомарной миграции может привести к тому, что ваша база данных окажется в несогласованном состоянии, если операция ValidateConstraint завершится неудачно.