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

Все эти operations доступны из модуля 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 migrations с пользователем, у которого они есть. В этом случае подключитесь к вашей базе данных Django и выполните запрос CREATE EXTENSION IF NOT EXISTS hstore;.

Changed in Django Development version:

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

CreateExtension

class CreateExtension(name)[исходный код]

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

name

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

BloomExtension

class BloomExtension[исходный код]
New in Django 3.1.

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

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

New in Django Development version.

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

Создает collation с заданными значениями name, locale и provider.

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

class RemoveCollation(name, locale, *, provider='libc', deterministic=True)[исходный код]

Удаляет колляции с именем name.

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

Ограничения

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

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

Одновременные операции с индексами

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

class AddIndexConcurrently(model_name, index)[исходный код]

Как AddIndex, но создает индекс с помощью опции CONCURRENTLY. При использовании этой опции есть несколько предостережений, о которых следует знать, см. the PostgreSQL documentation of building indexes concurrently.

class RemoveIndexConcurrently(model_name, name)[исходный код]

Как RemoveIndex, но удаляет индекс с опцией CONCURRENTLY. При использовании этой опции есть несколько предостережений, о которых следует знать, см. the PostgreSQL documentation.

Примечание

Опция CONCURRENTLY не поддерживается внутри транзакции (см. non-atomic migration).

Вернуться на верх