mirror of
				https://github.com/django/django.git
				synced 2025-11-04 05:35:37 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			130 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			3.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
=============================
 | 
						|
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``
 | 
						|
===================
 | 
						|
 | 
						|
.. class:: CreateExtension(name)
 | 
						|
 | 
						|
    An ``Operation`` subclass which installs PostgreSQL extensions.
 | 
						|
 | 
						|
    .. attribute:: 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
 | 
						|
===========================
 | 
						|
 | 
						|
.. versionadded:: 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 :class:`~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 :class:`~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
 | 
						|
    :ref:`non-atomic migration <non-atomic-migrations>`).
 |