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

Все эти операции доступны из django.contrib.postgres.operationsмодуля.

Создание расширения с помощью миграций

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

Настройте расширение hstore в PostgreSQL перед первой операцией CreateModel or, 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

классCreateExtension ( имя )

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

name

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

BloomExtension

класс BloomExtension
Новое в Django 3.1.

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

BtreeGinExtension

класс BtreeGinExtension

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

BtreeGistExtension

класс BtreeGistExtension

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

CITextExtension

класс CITextExtension

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

CryptoExtension

класс CryptoExtension

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

HStoreExtension

класс HStoreExtension

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

TrigramExtension

класс TrigramExtension

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

UnaccentExtension

класс UnaccentExtension

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

Управление сопоставлениями с помощью миграций

Новое в 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',
        ),
        ...
    ]
классCreateCollation ( имя , язык , * , поставщик = 'libc' , детерминированный = Истина )

Создает сопоставление с заданными name, localeи provider.

Задайте для deterministicпараметра значение, Falseчтобы создать недетерминированное сопоставление, например, для фильтрации без учета регистра.

классRemoveCollation ( имя , язык , * , поставщик = 'libc' , детерминированный = Истина )

Удаляет сопоставления с именем name.

При обратном это создает сверку с прилагающимися locale, providerи deterministicаргументами. Следовательно, localeтребуется сделать эту операцию обратимой.

Ограничения

PostgreSQL 9.6 поддерживает только 'libc'провайдера.

Недетерминированные сопоставления поддерживаются только в PostgreSQL 12+.

Параллельные операции с индексами

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

classAddIndexConcurrently ( имя_модели , индекс )

Вроде AddIndex, но создает индекс с CONCURRENTLYопцией. При использовании этой опции следует учитывать несколько предостережений, см. Документацию PostgreSQL по параллельному построению индексов .

classRemoveIndexConcurrently ( имя_модели , имя )

Вроде RemoveIndex, но убирает индекс с CONCURRENTLYопцией. При использовании этой опции следует учитывать несколько предостережений, см. Документацию PostgreSQL .

Примечание

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

Copyright ©2021 All rights reserved