Opérations de migration de base de données

Toutes ces opérations sont disponibles dans le module django.contrib.postgres.operations.

Création d’extension à l’aide des migrations

Il est possible de créer une extension de base de données PostgreSQL en utilisant un fichier de migration. Cet exemple crée une extension hstore, mais le même principe est applicable aux autres extensions.

Configurer l’extension hstore dans PostgreSQL avant la première opération CreateModel ou AddField qui concerne un champ HStoreField en ajoutant une migration comprenant l’opération HStoreExtension. Par exemple :

from django.contrib.postgres.operations import HStoreExtension

class Migration(migrations.Migration):
    ...

    operations = [
        HStoreExtension(),
        ...
    ]

The operation skips adding the extension if it already exists.

Pour la plupart des extensions, il est nécessaire que l’utilisateur de base de données possède les droits de superutilisateur. Si l’utilisateur de base de données Django ne possède pas les privilèges suffisants, il est alors nécessaire de créer l’extension en dehors des migrations Django avec un utilisateur qui possède ces droits. Dans ce cas, connectez-vous à la base de données et lancez la requête 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)

Une sous-classe d”Operation qui installe une extension PostgreSQL. Pour les extensions courantes, utilisez l’une des sous-classes plus spécifiques ci-dessous.

name

Ce paramètre est obligatoire. Le nom de l’extension à installer.

BloomExtension

class BloomExtension
New in Django 3.1.

Installe l’extension bloom.

BtreeGinExtension

class BtreeGinExtension

Installe l’extension btree_gin.

BtreeGistExtension

class BtreeGistExtension

Installe l’extension btree_gist.

CITextExtension

class CITextExtension

Installe l’extension citext.

CryptoExtension

class CryptoExtension

Installe l’extension pgcrypto.

HStoreExtension

class HStoreExtension

Installe l’extension hstore et configure également la connexion afin d’interpréter les données hstore pour un usage possible dans les migrations suivantes.

TrigramExtension

class TrigramExtension

Installe l’extension pg_trgm.

UnaccentExtension

class UnaccentExtension

Installe l’extension unaccent.

Managing collations using migrations

New in Django 3.2.

If you need to filter or order a column using a particular collation that your operating system provides but PostgreSQL does not, you can manage collations in your database using a migration file. These collations can then be used with the db_collation parameter on CharField, TextField, and their subclasses.

For example, to create a collation for German phone book ordering:

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)

Creates a collation with the given name, locale and provider.

Set the deterministic parameter to False to create a non-deterministic collation, such as for case-insensitive filtering.

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

Removes the collations named name.

When reversed this is creating a collation with the provided locale, provider, and deterministic arguments. Therefore, locale is required to make this operation reversible.

Restrictions

PostgreSQL 9.6 only supports the 'libc' provider.

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

Opérations d’index concurrentes

PostgreSQL prend en charge l’option CONCURRENTLY pour les instructions CREATE INDEX et DROP INDEX pour ajouter et supprimer des index sans verrouiller les écritures. Cette option est utile pour l’ajout ou la suppression d’index dans une base de données active en production.

class AddIndexConcurrently(model_name, index)

Comme AddIndex, mais crée un index avec l’option CONCURRENTLY. Il existe quelques mises en garde à respecter quand on utilise cette option, lisez la documentation PostgreSQL sur la construction concurrente d’index.

class RemoveIndexConcurrently(model_name, name)

Comme RemoveIndex, mais supprime l’index avec l’option CONCURRENTLY. Il existe quelques mises en garde à respecter quand on utilise cette option, lisez la documentation PostgreSQL.

Note

L’option CONCURRENTLY n’est pas prise en charge à l’intérieur d’une transaction (voir migrations non atomiques).

Back to Top