# Documentation Django 3.1.9.dev

# 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(),
            ...
        ]

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;`.

## `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`.

## Opérations d’index concurrentes

New in Django 3.0.

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).