Spec-Zone.ru › Django 5.1

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

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

Если вам нужно отфильтровать или отсортировать столбец с помощью определённой сортировки, предоставляемой вашей операционной системой, но не 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, но избегает валидации ограничения на существующих строках.

END_OF_DOCUMENT_MARKER
class ValidateConstraint(model_name, name) [source]

Сканирует таблицу и проверяет заданное ограничение CHECK на существующих строках.

Примечание

AddConstraintNotValid и ValidateConstraint операции должны выполняться в двух отдельных миграциях. Выполнение обеих операций в одной атомарной миграции имеет тот же эффект, что и AddConstraint, в то время как выполнение их в одной неатомарной миграции может привести к несогласованному состоянию вашей базы данных, если операция ValidateConstraint завершится неудачно.

© Django Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/5.1/ref/contrib/postgres/operations/

Spec-Zone.ru

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