Операции миграции базы данных
Все эти операции доступны из модуля 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;.
В более старых версиях проверка существования расширения не выполнялась.
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 с помощью миграций
Если вам нужно отфильтровать или отсортировать столбец с использованием конкретного набора правил сортировки, который предоставляет ваша операционная система, но 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/