2016-08-08 11:50:25 +00:00
|
|
|
=================================
|
|
|
|
PostgreSQL specific model indexes
|
|
|
|
=================================
|
|
|
|
|
|
|
|
.. module:: django.contrib.postgres.indexes
|
|
|
|
|
|
|
|
The following are PostgreSQL specific :doc:`indexes </ref/models/indexes>`
|
|
|
|
available from the ``django.contrib.postgres.indexes`` module.
|
|
|
|
|
2019-10-18 09:08:50 +00:00
|
|
|
``BloomIndex``
|
|
|
|
==============
|
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. class:: BloomIndex(*expressions, length=None, columns=(), **options)
|
2019-10-18 09:08:50 +00:00
|
|
|
|
|
|
|
Creates a bloom_ index.
|
|
|
|
|
|
|
|
To use this index access you need to activate the bloom_ extension on
|
|
|
|
PostgreSQL. You can install it using the
|
|
|
|
:class:`~django.contrib.postgres.operations.BloomExtension` migration
|
|
|
|
operation.
|
|
|
|
|
|
|
|
Provide an integer number of bits from 1 to 4096 to the ``length``
|
|
|
|
parameter to specify the length of each index entry. PostgreSQL's default
|
|
|
|
is 80.
|
|
|
|
|
|
|
|
The ``columns`` argument takes a tuple or list of up to 32 values that are
|
|
|
|
integer number of bits from 1 to 4095.
|
|
|
|
|
|
|
|
.. _bloom: https://www.postgresql.org/docs/current/bloom.html
|
|
|
|
|
2016-10-13 12:39:44 +00:00
|
|
|
``BrinIndex``
|
|
|
|
=============
|
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. class:: BrinIndex(*expressions, autosummarize=None, pages_per_range=None, **options)
|
2016-10-13 12:39:44 +00:00
|
|
|
|
|
|
|
Creates a `BRIN index
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/brin-intro.html>`_.
|
2017-01-16 16:28:30 +00:00
|
|
|
|
2018-01-05 11:53:08 +00:00
|
|
|
Set the ``autosummarize`` parameter to ``True`` to enable `automatic
|
|
|
|
summarization`_ to be performed by autovacuum.
|
|
|
|
|
2017-01-16 16:28:30 +00:00
|
|
|
The ``pages_per_range`` argument takes a positive integer.
|
2016-10-13 12:39:44 +00:00
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
.. _automatic summarization: https://www.postgresql.org/docs/current/brin-intro.html#BRIN-OPERATION
|
2018-01-05 11:53:08 +00:00
|
|
|
|
2018-07-30 22:28:11 +00:00
|
|
|
``BTreeIndex``
|
|
|
|
==============
|
|
|
|
|
2021-05-28 23:53:18 +00:00
|
|
|
.. class:: BTreeIndex(*expressions, fillfactor=None, deduplicate_items=None, **options)
|
2018-07-30 22:28:11 +00:00
|
|
|
|
|
|
|
Creates a B-Tree index.
|
|
|
|
|
|
|
|
Provide an integer value from 10 to 100 to the fillfactor_ parameter to
|
|
|
|
tune how packed the index pages will be. PostgreSQL's default is 90.
|
|
|
|
|
2021-05-28 23:53:18 +00:00
|
|
|
Provide a boolean value to the deduplicate_items_ parameter to control
|
|
|
|
whether deduplication is enabled. PostgreSQL enables deduplication by
|
|
|
|
default.
|
|
|
|
|
|
|
|
.. versionchanged:: 5.1
|
|
|
|
|
|
|
|
The ``deduplicate_items`` parameter was added.
|
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
.. _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS
|
2021-05-28 23:53:18 +00:00
|
|
|
.. _deduplicate_items: https://www.postgresql.org/docs/current/btree-implementation.html#BTREE-DEDUPLICATION
|
2018-07-30 22:28:11 +00:00
|
|
|
|
2016-08-08 11:50:25 +00:00
|
|
|
``GinIndex``
|
|
|
|
============
|
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. class:: GinIndex(*expressions, fastupdate=None, gin_pending_list_limit=None, **options)
|
2016-08-08 11:50:25 +00:00
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
Creates a `gin index <https://www.postgresql.org/docs/current/gin.html>`_.
|
2016-08-08 11:50:25 +00:00
|
|
|
|
2016-08-13 22:19:43 +00:00
|
|
|
To use this index on data types not in the `built-in operator classes
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/gin-builtin-opclasses.html>`_,
|
2016-08-13 22:19:43 +00:00
|
|
|
you need to activate the `btree_gin extension
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/btree-gin.html>`_ on
|
2016-08-08 11:50:25 +00:00
|
|
|
PostgreSQL. You can install it using the
|
|
|
|
:class:`~django.contrib.postgres.operations.BtreeGinExtension` migration
|
|
|
|
operation.
|
2017-05-30 21:17:32 +00:00
|
|
|
|
|
|
|
Set the ``fastupdate`` parameter to ``False`` to disable the `GIN Fast
|
|
|
|
Update Technique`_ that's enabled by default in PostgreSQL.
|
|
|
|
|
2022-06-24 12:52:21 +00:00
|
|
|
Provide an integer number of kilobytes to the gin_pending_list_limit_
|
|
|
|
parameter to tune the maximum size of the GIN pending list which is used
|
|
|
|
when ``fastupdate`` is enabled.
|
2017-05-30 21:17:32 +00:00
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
.. _GIN Fast Update Technique: https://www.postgresql.org/docs/current/gin-implementation.html#GIN-FAST-UPDATE
|
|
|
|
.. _gin_pending_list_limit: https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-GIN-PENDING-LIST-LIMIT
|
2017-05-30 21:17:32 +00:00
|
|
|
|
2017-07-01 13:30:34 +00:00
|
|
|
``GistIndex``
|
|
|
|
=============
|
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. class:: GistIndex(*expressions, buffering=None, fillfactor=None, **options)
|
2017-07-01 13:30:34 +00:00
|
|
|
|
|
|
|
Creates a `GiST index
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/gist.html>`_. These indexes are
|
|
|
|
automatically created on spatial fields with :attr:`spatial_index=True
|
2017-07-01 13:30:34 +00:00
|
|
|
<django.contrib.gis.db.models.BaseSpatialField.spatial_index>`. They're
|
|
|
|
also useful on other types, such as
|
|
|
|
:class:`~django.contrib.postgres.fields.HStoreField` or the :ref:`range
|
|
|
|
fields <range-fields>`.
|
|
|
|
|
|
|
|
To use this index on data types not in the built-in `gist operator classes
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/gist-builtin-opclasses.html>`_,
|
2017-07-01 13:30:34 +00:00
|
|
|
you need to activate the `btree_gist extension
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/btree-gist.html>`_ on PostgreSQL.
|
|
|
|
You can install it using the
|
2017-07-01 13:30:34 +00:00
|
|
|
:class:`~django.contrib.postgres.operations.BtreeGistExtension` migration
|
|
|
|
operation.
|
|
|
|
|
|
|
|
Set the ``buffering`` parameter to ``True`` or ``False`` to manually enable
|
|
|
|
or disable `buffering build`_ of the index.
|
|
|
|
|
|
|
|
Provide an integer value from 10 to 100 to the fillfactor_ parameter to
|
|
|
|
tune how packed the index pages will be. PostgreSQL's default is 90.
|
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
.. _buffering build: https://www.postgresql.org/docs/current/gist-implementation.html#GIST-BUFFERING-BUILD
|
|
|
|
.. _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS
|
2017-12-05 09:43:56 +00:00
|
|
|
|
|
|
|
``HashIndex``
|
|
|
|
=============
|
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. class:: HashIndex(*expressions, fillfactor=None, **options)
|
2017-12-05 09:43:56 +00:00
|
|
|
|
|
|
|
Creates a hash index.
|
|
|
|
|
|
|
|
Provide an integer value from 10 to 100 to the fillfactor_ parameter to
|
|
|
|
tune how packed the index pages will be. PostgreSQL's default is 90.
|
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
.. _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS
|
2017-12-05 09:48:04 +00:00
|
|
|
|
|
|
|
``SpGistIndex``
|
|
|
|
===============
|
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. class:: SpGistIndex(*expressions, fillfactor=None, **options)
|
2017-12-05 09:48:04 +00:00
|
|
|
|
|
|
|
Creates an `SP-GiST index
|
2019-03-30 01:49:44 +00:00
|
|
|
<https://www.postgresql.org/docs/current/spgist.html>`_.
|
2017-12-05 09:48:04 +00:00
|
|
|
|
|
|
|
Provide an integer value from 10 to 100 to the fillfactor_ parameter to
|
|
|
|
tune how packed the index pages will be. PostgreSQL's default is 90.
|
|
|
|
|
2019-03-30 01:49:44 +00:00
|
|
|
.. _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS
|
2019-10-10 18:04:17 +00:00
|
|
|
|
|
|
|
``OpClass()`` expressions
|
|
|
|
=========================
|
|
|
|
|
|
|
|
.. class:: OpClass(expression, name)
|
|
|
|
|
|
|
|
An ``OpClass()`` expression represents the ``expression`` with a custom
|
2021-11-03 21:21:50 +00:00
|
|
|
`operator class`_ that can be used to define functional indexes, functional
|
|
|
|
unique constraints, or exclusion constraints. To use it, you need to add
|
|
|
|
``'django.contrib.postgres'`` in your :setting:`INSTALLED_APPS`. Set the
|
|
|
|
``name`` parameter to the name of the `operator class`_.
|
2019-10-10 18:04:17 +00:00
|
|
|
|
|
|
|
For example::
|
|
|
|
|
2021-01-24 22:08:14 +00:00
|
|
|
Index(
|
|
|
|
OpClass(Lower("username"), name="varchar_pattern_ops"),
|
|
|
|
name="lower_username_idx",
|
|
|
|
)
|
2019-10-10 18:04:17 +00:00
|
|
|
|
|
|
|
creates an index on ``Lower('username')`` using ``varchar_pattern_ops``.
|
2021-11-03 21:21:50 +00:00
|
|
|
::
|
2021-02-06 19:45:54 +00:00
|
|
|
|
|
|
|
UniqueConstraint(
|
|
|
|
OpClass(Upper("description"), name="text_pattern_ops"),
|
|
|
|
name="upper_description_unique",
|
|
|
|
)
|
|
|
|
|
|
|
|
creates a unique constraint on ``Upper('description')`` using
|
|
|
|
``text_pattern_ops``.
|
2021-11-03 21:21:50 +00:00
|
|
|
::
|
|
|
|
|
|
|
|
ExclusionConstraint(
|
|
|
|
name="exclude_overlapping_ops",
|
|
|
|
expressions=[
|
|
|
|
(OpClass("circle", name="circle_ops"), RangeOperators.OVERLAPS),
|
|
|
|
],
|
|
|
|
)
|
|
|
|
|
|
|
|
creates an exclusion constraint on ``circle`` using ``circle_ops``.
|
2021-02-06 19:45:54 +00:00
|
|
|
|
2019-10-10 18:04:17 +00:00
|
|
|
.. _operator class: https://www.postgresql.org/docs/current/indexes-opclass.html
|