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

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

класс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.0.

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

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

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

классRemoveIndexConcurrently ( имя_модели , имя )

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

Заметка

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

Copyright ©2021 All rights reserved