Fixed #27355 -- Added “Creating extension using migrations” docs.

This commit is contained in:
ntuckovic 2016-11-05 14:18:11 +01:00 committed by Tim Graham
parent e744c7e459
commit 4de8aaf7ff
2 changed files with 33 additions and 21 deletions

View File

@ -281,27 +281,8 @@ A more useful index is a ``GIN`` index, which you should create using a
To use this field, you'll need to:
1. Add ``'django.contrib.postgres'`` in your :setting:`INSTALLED_APPS`.
2. Setup the hstore extension in PostgreSQL before the first ``CreateModel``
or ``AddField`` operation by adding a migration with the
:class:`~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;``
2. :ref:`Setup the hstore extension <create-postgresql-extensions>` in
PostgreSQL.
You'll see an error like ``can't adapt type 'dict'`` if you skip the first
step, or ``type "hstore" does not exist`` if you skip the second.

View File

@ -5,6 +5,37 @@ Database migration operations
All of these :doc:`operations </ref/migration-operations>` are available from
the ``django.contrib.postgres.operations`` module.
.. _create-postgresql-extensions:
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
:class:`~django.contrib.postgres.fields.HStoreField` by adding a migration with
the :class:`~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;``.
.. currentmodule:: django.contrib.postgres.operations
``CreateExtension``