# Django 3.0.9.dev - dokumentacja

# Database migration operations

All of these operations are available from the `django.contrib.postgres.operations` module.

## Creating extension using migrations

You can create a PostgreSQL extension in your database using a migration file. This example creates an hstore extension, but the same principles apply for other extensions.

Set up the hstore extension in PostgreSQL before the first `CreateModel` or `AddField` operation that involves `HStoreField` by adding a migration with the `HStoreExtension` operation. For example:

    from django.contrib.postgres.operations import HStoreExtension

    class Migration(migrations.Migration):
        ...

        operations = [
            HStoreExtension(),
            ...
        ]

Creating the extension requires a database user with superuser privileges. If the Django database user doesn’t have superuser privileges, you’ll have to create the extension outside of Django migrations with a user that has the appropriate privileges. In that case, connect to your Django database and run the query `CREATE EXTENSION IF NOT EXISTS hstore;`.

## `CreateExtension`

class `CreateExtension`(name)

  An `Operation` subclass which installs PostgreSQL extensions.

  `name`

    This is a required argument. The name of the extension to be installed.

## `BtreeGinExtension`

class `BtreeGinExtension`

  Install the `btree_gin` extension.

## `BtreeGistExtension`

class `BtreeGistExtension`

  Install the `btree_gist` extension.

## `CITextExtension`

class `CITextExtension`

  Installs the `citext` extension.

## `CryptoExtension`

class `CryptoExtension`

  Installs the `pgcrypto` extension.

## `HStoreExtension`

class `HStoreExtension`

  Installs the `hstore` extension and also sets up the connection to interpret hstore data for possible use in subsequent migrations.

## `TrigramExtension`

class `TrigramExtension`

  Installs the `pg_trgm` extension.

## `UnaccentExtension`

class `UnaccentExtension`

  Installs the `unaccent` extension.

## Index concurrent operations

New in Django 3.0.

PostgreSQL supports the `CONCURRENTLY` option to `CREATE INDEX` and `DROP INDEX` statements to add and remove indexes without locking out writes. This option is useful for adding or removing an index in a live production database.

class `AddIndexConcurrently`(model_name, index)

  Like `AddIndex`, but creates an index with the `CONCURRENTLY` option. This has a few caveats to be aware of when using this option, see the PostgreSQL documentation of building indexes concurrently.

class `RemoveIndexConcurrently`(model_name, name)

  Like `RemoveIndex`, but removes the index with the `CONCURRENTLY` option. This has a few caveats to be aware of when using this option, see the PostgreSQL documentation.

Informacja

The `CONCURRENTLY` option is not supported inside a transaction (see non-atomic migration).