Spec-Zone.ru › Django 4.0

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

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

Изменено в Django 3.2:

В более старых версиях существование расширения не проверялось.

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 с помощью миграций

Новое в Django 3.2.

Если вам нужно отфильтровать или отсортировать столбец с использованием определённой сортировки, которую предоставляет ваша операционная система, но PostgreSQL не поддерживает, вы можете управлять сортировками в своей базе данных с помощью файла миграции. Эти сортировки затем могут быть использованы с параметром db_collation в CharField, TextField и их подклассах.

Например, для создания сортировки для немецкого телефонного справочника:

from django.contrib.postgres.operations import CreateCollation

class Migration(migrations.Migration):
    ...

    operations = [
        CreateCollation(
            'german_phonebook',
            provider='icu',
            locale='und-u-ks-level2',
        ),
        ...
    ]
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 12 и выше.

Конкурентные операции с индексами

PostgreSQL поддерживает опцию CONCURRENTLY для CREATE INDEX и DROP INDEX операторов для добавления и удаления индексов без блокировки записей. Эта опция полезна для добавления или удаления индекса в рабочей базе данных.

class AddIndexConcurrently(model_name, index)

Аналогично AddIndex, но создаёт индекс с опцией CONCURRENTLY. Есть несколько нюансов, о которых следует помнить при использовании этой опции, см. документацию PostgreSQL по созданию индексов параллельно.

class RemoveIndexConcurrently(model_name, name)

Аналогично RemoveIndex, но удаляет индекс с опцией CONCURRENTLY. Есть несколько нюансов, о которых следует помнить при использовании этой опции, см. документацию PostgreSQL.

Примечание

Опция CONCURRENTLY не поддерживается внутри транзакции (см. неатомарные миграции).

Добавление ограничений без принудительной проверки

Новое в Django 4.0.

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.0/ref/contrib/postgres/operations/

Spec-Zone.ru

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