Spec-Zone.ru › Django 4.2

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

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

Подкласс Operation, который устанавливает расширение PostgreSQL. Для распространённых расширений используйте один из более конкретных подклассов ниже.

name

Это обязательный аргумент. Имя устанавливаемого расширения.

BloomExtension

class BloomExtension

Устанавливает расширение bloom.

BtreeGinExtension

class BtreeGinExtension

Устанавливает расширение btree_gin.

BtreeGistExtension

class BtreeGistExtension

Устанавливает расширение btree_gist.

CITextExtension

class CITextExtension

Устанавливает расширение citext.

CryptoExtension

class CryptoExtension

Устанавливает расширение pgcrypto.

HStoreExtension

class HStoreExtension

Устанавливает расширение hstore и также настраивает соединение для интерпретации данных hstore для возможного использования в последующих миграциях.

TrigramExtension

class TrigramExtension

Устанавливает расширение pg_trgm.

UnaccentExtension

class UnaccentExtension

Устанавливает расширение 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)

Создаёт набор правил сортировки с заданным 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/4.2/ref/contrib/postgres/operations/

Spec-Zone.ru

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