• 3.1
  • 5.0
  • 6.1
  • Версия документации: 3.2

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

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

Changed in Django 3.2:

In older versions, the pre-existence of the extension isn’t checked.

CreateExtension

class CreateExtension(name)

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

name

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

BloomExtension

class BloomExtension
New in Django 3.1.

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

CreateExtension

class BtreeGinExtension

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

CreateExtension

class BtreeGistExtension

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

CreateExtension

class CITextExtension

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

CreateExtension

class CryptoExtension

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

HStoreExtension

class HStoreExtension

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

CreateExtension

class TrigramExtension

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

UnaccentExtension

class UnaccentExtension

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

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

New in 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)

Создает сопоставление с заданным именем, локалью и поставщиком.

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

class RemoveCollation(name, locale, *, provider='libc', deterministic=True)

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

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

Restrictions

PostgreSQL 9.6 only supports the 'libc' provider.

Non-deterministic collations are supported only on PostgreSQL 12+.

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

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

class AddIndexConcurrently(model_name, index)

Подобно AddIndex, но создает индекс с опцией CONCURRENTLY. При использовании этой опции следует учитывать несколько предостережений: см. документацию PostgreSQL по одновременному построению индексов <https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY>`_.

class RemoveIndexConcurrently(model_name, name)

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

Примечание

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

Back to Top