1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
|
=================================
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.
``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
: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
``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 `automatic
summarization`_ 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 to
tune 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>`_ on
PostgreSQL. You can install it using the
:class:`~django.contrib.postgres.operations.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 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.
.. _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 are
automatically created on spatial fields with :attr:`spatial_index=True
<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
<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` 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.
.. _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 to
tune 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 to
tune 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
``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, 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`_.
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``.
.. _operator class: https://www.postgresql.org/docs/current/indexes-opclass.html
|