Операции миграции базы данных ¶
Все эти операции доступны из django.contrib.postgres.operations
модуля.
Создание расширения с помощью миграций ¶
Вы можете создать расширение PostgreSQL в своей базе данных, используя файл миграции. В этом примере создается расширение hstore, но те же принципы применимы и к другим расширениям.
Настройте расширение hstore в PostgreSQL перед первой операцией CreateModel
or, 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
¶
HStoreExtension
¶
-
класс
HStoreExtension
¶ Устанавливает
hstore
расширение, а также настраивает соединение для интерпретации данных hstore для возможного использования в последующих миграциях.
Управление сопоставлениями с помощью миграций ¶
Если вам нужно отфильтровать или упорядочить столбец, используя определенное сопоставление, которое предоставляет ваша операционная система, но не 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',
),
...
]
-
класс
CreateCollation
( имя , язык , * , поставщик = 'libc' , детерминированный = Истина ) ¶ Создает сопоставление с заданными
name
,locale
иprovider
.Задайте для
deterministic
параметра значение,False
чтобы создать недетерминированное сопоставление, например, для фильтрации без учета регистра.
-
класс
RemoveCollation
( имя , язык , * , поставщик = 'libc' , детерминированный = Истина ) ¶ Удаляет сопоставления с именем
name
.При обратном это создает сверку с прилагающимися
locale
,provider
иdeterministic
аргументами. Следовательно,locale
требуется сделать эту операцию обратимой.
Ограничения
PostgreSQL 9.6 поддерживает только 'libc'
провайдера.
Недетерминированные сопоставления поддерживаются только в PostgreSQL 12+.
Параллельные операции с индексами ¶
PostgreSQL поддерживает CONCURRENTLY
опцию и
операторы для добавления и удаления индексов без блокировки записи. Эта опция полезна для добавления или удаления индекса в действующей производственной базе данных.CREATE INDEX
DROP INDEX
-
class
AddIndexConcurrently
( имя_модели , индекс ) ¶ Вроде
AddIndex
, но создает индекс сCONCURRENTLY
опцией. При использовании этой опции следует учитывать несколько предостережений, см. Документацию PostgreSQL по параллельному построению индексов .
-
class
RemoveIndexConcurrently
( имя_модели , имя ) ¶ Вроде
RemoveIndex
, но убирает индекс сCONCURRENTLY
опцией. При использовании этой опции следует учитывать несколько предостережений, см. Документацию PostgreSQL .
Примечание
Эта CONCURRENTLY
опция не поддерживается внутри транзакции (см.
Неатомарную миграцию ).