# Django 2.0.dev20170216164632 documentation

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

## `CITextExtension`

class `CITextExtension`

  Installs the `citext` 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.