# Django 4.0.8.dev20220803071047 - dokumentacja

# PostgreSQL specific model indexes

The following are PostgreSQL specific 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 on PostgreSQL. You can install it using the `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.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `BrinIndex`

class `BrinIndex`(*expressions, autosummarize=None, pages_per_range=None, **options)

  Creates a BRIN index.

  Set the `autosummarize` parameter to `True` to enable automatic summarization to be performed by autovacuum.

  The `pages_per_range` argument takes a positive integer.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `BTreeIndex`

class `BTreeIndex`(*expressions, fillfactor=None, **options)

  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.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `GinIndex`

class `GinIndex`(*expressions, fastupdate=None, gin_pending_list_limit=None, **options)

  Creates a gin index.

  To use this index on data types not in the built-in operator classes, you need to activate the btree_gin extension on PostgreSQL. You can install it using the `BtreeGinExtension` migration operation.

  Set the `fastupdate` parameter to `False` to disable the GIN Fast Update Technique that’s enabled by default in PostgreSQL.

  Provide an integer number of bytes to the gin_pending_list_limit parameter to tune the maximum size of the GIN pending list which is used when `fastupdate` is enabled.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `GistIndex`

class `GistIndex`(*expressions, buffering=None, fillfactor=None, **options)

  Creates a GiST index. These indexes are automatically created on spatial fields with `spatial_index=True`. They’re also useful on other types, such as `HStoreField` or the range fields.

  To use this index on data types not in the built-in gist operator classes, you need to activate the btree_gist extension on PostgreSQL. You can install it using the `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.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `HashIndex`

class `HashIndex`(*expressions, fillfactor=None, **options)

  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.

  Use this index only on PostgreSQL 10 and later

  Hash indexes have been available in PostgreSQL for a long time, but they suffer from a number of data integrity issues in older versions.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `SpGistIndex`

class `SpGistIndex`(*expressions, fillfactor=None, **options)

  Creates an SP-GiST 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.

  Changed in Django 3.2:

  Positional argument `*expressions` was added in order to support functional indexes.

## `OpClass()` expressions

New in Django 3.2.

class `OpClass`(expression, name)

  An `OpClass()` expression represents the `expression` with a custom operator class that can be used to define functional indexes or unique constraints. To use it, you need to add `'django.contrib.postgres'` in your `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`.

  Another example:

      UniqueConstraint(
          OpClass(Upper('description'), name='text_pattern_ops'),
          name='upper_description_unique',
      )

  creates a unique constraint on `Upper('description')` using `text_pattern_ops`.

  Changed in Django 4.0:

  Support for functional unique constraints was added.