---
title: "Database migration operations"
version: 3.0
locale: zh-hans
source: https://docs.djangoproject.com/zh-hans/3.0/ref/contrib/postgres/operations/
canonical: https://djangodocs.dev/zh-hans/3.0/ref/contrib/postgres/operations/
---
# Database migration operations

All of these [operations](/zh-hans/3.0/ref/migration-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`](/zh-hans/3.0/ref/contrib/postgres/fields/#django.contrib.postgres.fields.HStoreField) by adding a migration with
the [`HStoreExtension`](#django.contrib.postgres.operations.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`](/zh-hans/3.0/ref/migration-operations/#django.db.migrations.operations.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](https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-CONCURRENTLY).

#### `class RemoveIndexConcurrently(model_name, name)`

Like [`RemoveIndex`](/zh-hans/3.0/ref/migration-operations/#django.db.migrations.operations.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](https://www.postgresql.org/docs/current/sql-dropindex.html).

> **Note**
>
> The `CONCURRENTLY` option is not supported inside a transaction (see
> [non-atomic migration](/zh-hans/3.0/howto/writing-migrations/#non-atomic-migrations)).
