=================================PostgreSQL specific model indexes=================================.. module:: django.contrib.postgres.indexesThe following are PostgreSQL specific :doc:`indexes </ref/models/indexes>`available from the ``django.contrib.postgres.indexes`` module.``BloomIndex``==============.. class:: BloomIndex(*expressions, length=None, columns=(), **options)Creates a bloom_ index.To use this index access you need to activate the bloom_ extension onPostgreSQL. You can install it using the:class:`~django.contrib.postgres.operations.BloomExtension` migrationoperation.Provide an integer number of bits from 1 to 4096 to the ``length``parameter to specify the length of each index entry. PostgreSQL's defaultis 80.The ``columns`` argument takes a tuple or list of up to 32 values that areinteger number of bits from 1 to 4095... _bloom: https://www.postgresql.org/docs/current/bloom.html``BrinIndex``=============.. class:: BrinIndex(*expressions, autosummarize=None, pages_per_range=None, **options)Creates a `BRIN index<https://www.postgresql.org/docs/current/brin-intro.html>`_.Set the ``autosummarize`` parameter to ``True`` to enable `automaticsummarization`_ to be performed by autovacuum.The ``pages_per_range`` argument takes a positive integer... _automatic summarization: https://www.postgresql.org/docs/current/brin-intro.html#BRIN-OPERATION``BTreeIndex``==============.. class:: BTreeIndex(*expressions, fillfactor=None, **options)Creates a B-Tree index.Provide an integer value from 10 to 100 to the fillfactor_ parameter totune how packed the index pages will be. PostgreSQL's default is 90... _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS``GinIndex``============.. class:: GinIndex(*expressions, fastupdate=None, gin_pending_list_limit=None, **options)Creates a `gin index <https://www.postgresql.org/docs/current/gin.html>`_.To use this index on data types not in the `built-in operator classes<https://www.postgresql.org/docs/current/gin-builtin-opclasses.html>`_,you need to activate the `btree_gin extension<https://www.postgresql.org/docs/current/btree-gin.html>`_ onPostgreSQL. You can install it using the:class:`~django.contrib.postgres.operations.BtreeGinExtension` migrationoperation.Set the ``fastupdate`` parameter to ``False`` to disable the `GIN FastUpdate Technique`_ that's enabled by default in PostgreSQL.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 usedwhen ``fastupdate`` is enabled... _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``GistIndex``=============.. class:: GistIndex(*expressions, buffering=None, fillfactor=None, **options)Creates a `GiST index<https://www.postgresql.org/docs/current/gist.html>`_. These indexes areautomatically created on spatial fields with :attr:`spatial_index=True<django.contrib.gis.db.models.BaseSpatialField.spatial_index>`. They'realso useful on other types, such as:class:`~django.contrib.postgres.fields.HStoreField` or the :ref:`rangefields <range-fields>`.To use this index on data types not in the built-in `gist operator classes<https://www.postgresql.org/docs/current/gist-builtin-opclasses.html>`_,you need to activate the `btree_gist extension<https://www.postgresql.org/docs/current/btree-gist.html>`_ on PostgreSQL.You can install it using the:class:`~django.contrib.postgres.operations.BtreeGistExtension` migrationoperation.Set the ``buffering`` parameter to ``True`` or ``False`` to manually enableor disable `buffering build`_ of the index.Provide an integer value from 10 to 100 to the fillfactor_ parameter totune how packed the index pages will be. PostgreSQL's default is 90... _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``HashIndex``=============.. class:: HashIndex(*expressions, fillfactor=None, **options)Creates a hash index.Provide an integer value from 10 to 100 to the fillfactor_ parameter totune how packed the index pages will be. PostgreSQL's default is 90... _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS``SpGistIndex``===============.. class:: SpGistIndex(*expressions, fillfactor=None, **options)Creates an `SP-GiST index<https://www.postgresql.org/docs/current/spgist.html>`_.Provide an integer value from 10 to 100 to the fillfactor_ parameter totune how packed the index pages will be. PostgreSQL's default is 90... versionchanged:: 4.1Support for covering SP-GiST indexes on PostgreSQL 14+ was added... _fillfactor: https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS``OpClass()`` expressions=========================.. class:: OpClass(expression, name)An ``OpClass()`` expression represents the ``expression`` with a custom`operator class`_ that can be used to define functional indexes, functionalunique 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`_.For example::Index(OpClass(Lower('username'), name='varchar_pattern_ops'),name='lower_username_idx',)creates an index on ``Lower('username')`` using ``varchar_pattern_ops``.::UniqueConstraint(OpClass(Upper('description'), name='text_pattern_ops'),name='upper_description_unique',)creates a unique constraint on ``Upper('description')`` using``text_pattern_ops``.::ExclusionConstraint(name='exclude_overlapping_ops',expressions=[(OpClass('circle', name='circle_ops'), RangeOperators.OVERLAPS),],)creates an exclusion constraint on ``circle`` using ``circle_ops``... versionchanged:: 4.0Support for functional unique constraints was added... versionchanged:: 4.1Support for exclusion constraints was added... _operator class: https://www.postgresql.org/docs/current/indexes-opclass.html