Spec-Zone.ru › Django 6.0

Операции миграции базы данных

Все эти операции доступны из модуля 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API