Spec-Zone.ru › Django 3.2

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

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

Управление наборами правил сортировки 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 9.6 поддерживает только поставщика 'libc'.

Недетерминированные наборы правил сортировки поддерживаются только в 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 Software Foundation and individual contributors
Licensed under the BSD License.
https://docs.djangoproject.com/en/3.2/ref/contrib/postgres/operations/

Spec-Zone.ru

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