{"title":"PostgreSQL 特有模型索引","version":"5.0","locale":"zh-hans","docname":"ref/contrib/postgres/indexes","url":"/zh-hans/5.0/ref/contrib/postgres/indexes/","canonical":"https://djangodocs.dev/zh-hans/5.0/ref/contrib/postgres/indexes/","summary":"以下是 PostgreSQL 特有的索引可以从 django.contrib.postgres.indexes 模块中获得。创建一个 bloom 索引。","html":"<span id=\"postgresql-specific-model-indexes\"></span><h1>PostgreSQL 特有模型索引<a class=\"heading-anchor\" href=\"#module-django.contrib.postgres.indexes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>以下是 PostgreSQL 特有的 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/models/indexes/\"><span class=\"doc\">索引</span></a> 可以从 <code class=\"docutils literal notranslate\">django.contrib.postgres.indexes</code> 模块中获得。</p>\n<section id=\"bloomindex\">\n<h2><code class=\"docutils literal notranslate\">BloomIndex</code><a class=\"heading-anchor\" href=\"#bloomindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.BloomIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BloomIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">length<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">columns<span class=\"o\">=</span><span class=\"default_value\">()</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.BloomIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/bloom.html\">bloom</a> 索引。</p>\n<p>要使用这个索引访问，你需要激活 PostgreSQL 上的 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/bloom.html\">bloom</a> 扩展。你可以使用 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.BloomExtension\" title=\"django.contrib.postgres.operations.BloomExtension\"><code class=\"xref py py-class docutils literal notranslate\">BloomExtension</code></a> 迁移操作来安装它。</p>\n<p>为 <code class=\"docutils literal notranslate\">length</code> 参数提供一个从 1 到 4096 的整数位，用于指定每个索引条目的长度。PostgreSQL 的默认值是 80。</p>\n<p><code class=\"docutils literal notranslate\">columns</code> 参数取一个元组或最多 32 个值的列表，这些值是 1 到 4095 的整数位。</p>\n</dd></dl>\n\n</section>\n<section id=\"brinindex\">\n<h2><code class=\"docutils literal notranslate\">BrinIndex</code><a class=\"heading-anchor\" href=\"#brinindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.BrinIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BrinIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">autosummarize<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">pages_per_range<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.BrinIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/brin-intro.html\">BRIN 索引</a> 。</p>\n<p>将 <code class=\"docutils literal notranslate\">autosummarize</code> 参数设置为 <code class=\"docutils literal notranslate\">True</code>，启用 autovacuum 进行 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/brin-intro.html#BRIN-OPERATION\">自动汇总</a> 。</p>\n<p><code class=\"docutils literal notranslate\">pages_per_range</code> 参数取一个正整数。</p>\n</dd></dl>\n\n</section>\n<section id=\"btreeindex\">\n<h2><code class=\"docutils literal notranslate\">BTreeIndex</code><a class=\"heading-anchor\" href=\"#btreeindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.BTreeIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">BTreeIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">fillfactor<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.BTreeIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个 B 树索引。</p>\n<p>为 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS\">fillfactor</a> 参数提供一个从  10 到 100 的整数值，以调整索引页的打包程度。PostgreSQL 的默认值是 90。</p>\n</dd></dl>\n\n</section>\n<section id=\"ginindex\">\n<h2><code class=\"docutils literal notranslate\">GinIndex</code><a class=\"heading-anchor\" href=\"#ginindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.GinIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GinIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">fastupdate<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">gin_pending_list_limit<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.GinIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gin.html\">gin 索引</a> 。</p>\n<p>要想在不在 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gin-builtin-opclasses.html\">内置运算符类</a> 的数据类型上使用这个索引，需要在 PostgreSQL 上激活 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/btree-gin.html\">btree_gin 扩展</a> 。你可以使用 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.BtreeGinExtension\" title=\"django.contrib.postgres.operations.BtreeGinExtension\"><code class=\"xref py py-class docutils literal notranslate\">BtreeGinExtension</code></a> 迁移操作来安装它。</p>\n<p>将 <code class=\"docutils literal notranslate\">fastupdate</code> 参数设置为 <code class=\"docutils literal notranslate\">False</code>，以禁用 PostgreSQL 中默认启用的 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gin-implementation.html#GIN-FAST-UPDATE\">GIN 快速更新技术</a> 。</p>\n<p>将一个整数值以千字节为单位提供给 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-GIN-PENDING-LIST-LIMIT\">gin_pending_list_limit</a> 参数，以调整当启用 <code class=\"docutils literal notranslate\">fastupdate</code> 时用于限制 GIN 待处理列表的最大大小。</p>\n</dd></dl>\n\n</section>\n<section id=\"gistindex\">\n<h2><code class=\"docutils literal notranslate\">GistIndex</code><a class=\"heading-anchor\" href=\"#gistindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.GistIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">GistIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">buffering<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\">fillfactor<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.GistIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gist.html\">GiST 索引</a> 。这些索引在空间字段上会自动创建 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/gis/model-api/#django.contrib.gis.db.models.BaseSpatialField.spatial_index\" title=\"django.contrib.gis.db.models.BaseSpatialField.spatial_index\"><code class=\"xref py py-attr docutils literal notranslate\">spatial_index=True</code></a>。它们在其他类型上也很有用，比如 <code class=\"xref py py-class docutils literal notranslate\">HStoreField</code> 或者 <span class=\"xref std std-ref\">range fields</span>。</p>\n<p>要在不在内置的 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gist-builtin-opclasses.html\">gist 操作类</a> 的数据类型上使用这个索引，需要在 PostgreSQL 上激活 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/btree-gist.html\">btree_gist 扩展</a> 。你可以使用 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/contrib/postgres/operations/#django.contrib.postgres.operations.BtreeGistExtension\" title=\"django.contrib.postgres.operations.BtreeGistExtension\"><code class=\"xref py py-class docutils literal notranslate\">BtreeGistExtension</code></a> 迁移操作来安装它。</p>\n<p>将 <code class=\"docutils literal notranslate\">buffering</code> 参数设置为 <code class=\"docutils literal notranslate\">True</code> 或 <code class=\"docutils literal notranslate\">False</code>，手动启用或禁用索引的 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/gist-implementation.html#GIST-BUFFERING-BUILD\">buffering build</a> 。</p>\n<p>为 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS\">fillfactor</a> 参数提供一个从  10 到 100 的整数值，以调整索引页的打包程度。PostgreSQL 的默认值是 90。</p>\n</dd></dl>\n\n</section>\n<section id=\"hashindex\">\n<h2><code class=\"docutils literal notranslate\">HashIndex</code><a class=\"heading-anchor\" href=\"#hashindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.HashIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">HashIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">fillfactor<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.HashIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建一个哈希索引。</p>\n<p>为 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS\">fillfactor</a> 参数提供一个从  10 到 100 的整数值，以调整索引页的打包程度。PostgreSQL 的默认值是 90。</p>\n</dd></dl>\n\n</section>\n<section id=\"spgistindex\">\n<h2><code class=\"docutils literal notranslate\">SpGistIndex</code><a class=\"heading-anchor\" href=\"#spgistindex\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.SpGistIndex\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">SpGistIndex</span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"o\">*</span>expressions</em>, <em class=\"sig-param\">fillfactor<span class=\"o\">=</span><span class=\"default_value\">None</span></em>, <em class=\"sig-param\"><span class=\"o\">**</span>options</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.SpGistIndex\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>创建 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/spgist.html\">SP-GIST 索引</a> 。</p>\n<p>为 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/sql-createindex.html#SQL-CREATEINDEX-STORAGE-PARAMETERS\">fillfactor</a> 参数提供一个从  10 到 100 的整数值，以调整索引页的打包程度。PostgreSQL 的默认值是 90。</p>\n</dd></dl>\n\n</section>\n<section id=\"opclass-expressions\">\n<h2><code class=\"docutils literal notranslate\">OpClass()</code> 表达式<a class=\"heading-anchor\" href=\"#opclass-expressions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<dl class=\"py class\">\n<dt class=\"sig sig-object py\" id=\"django.contrib.postgres.indexes.OpClass\">\n<em class=\"property\"><span class=\"k\">class</span> </em><span class=\"sig-name descname\">OpClass</span><span class=\"sig-paren\">(</span><em class=\"sig-param\">expression</em>, <em class=\"sig-param\">name</em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.contrib.postgres.indexes.OpClass\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>一个 <code class=\"docutils literal notranslate\">OpClass()</code> 表达式表示带有自定义 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">operator class</a> 的 <code class=\"docutils literal notranslate\">expression</code>，它可用于定义功能索引、功能唯一约束或排除约束。要使用它，您需要在 <a class=\"reference internal\" href=\"/zh-hans/5.0/ref/settings/#std-setting-INSTALLED_APPS\"><code class=\"xref std std-setting docutils literal notranslate\">INSTALLED_APPS</code></a> 中添加 <code class=\"docutils literal notranslate\">'django.contrib.postgres'</code>。将 <code class=\"docutils literal notranslate\">name</code> 参数设置为 <a class=\"reference external\" href=\"https://www.postgresql.org/docs/current/indexes-opclass.html\">operator class</a> 的名称。</p>\n<p>例子：</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>Index<span class=\"p\">(</span>\n    OpClass<span class=\"p\">(</span>Lower<span class=\"p\">(</span><span class=\"s2\">&quot;username&quot;</span><span class=\"p\">),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;varchar_pattern_ops&quot;</span><span class=\"p\">),</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;lower_username_idx&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>使用 <code class=\"docutils literal notranslate\">varchar_pattern_ops</code> 在 <code class=\"docutils literal notranslate\">Lower('username')</code> 上创建一个索引。:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>UniqueConstraint<span class=\"p\">(</span>\n    OpClass<span class=\"p\">(</span>Upper<span class=\"p\">(</span><span class=\"s2\">&quot;description&quot;</span><span class=\"p\">),</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;text_pattern_ops&quot;</span><span class=\"p\">),</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;upper_description_unique&quot;</span><span class=\"p\">,</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>使用 <code class=\"docutils literal notranslate\">text_pattern_ops</code> 在 <code class=\"docutils literal notranslate\">Upper('description')</code> 上创建一个唯一约束。:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>ExclusionConstraint<span class=\"p\">(</span>\n    name<span class=\"o\">=</span><span class=\"s2\">&quot;exclude_overlapping_ops&quot;</span><span class=\"p\">,</span>\n    expressions<span class=\"o\">=</span><span class=\"p\">[</span>\n        <span class=\"p\">(</span>OpClass<span class=\"p\">(</span><span class=\"s2\">&quot;circle&quot;</span><span class=\"p\">,</span> name<span class=\"o\">=</span><span class=\"s2\">&quot;circle_ops&quot;</span><span class=\"p\">),</span> RangeOperators<span class=\"o\">.</span>OVERLAPS<span class=\"p\">),</span>\n    <span class=\"p\">],</span>\n<span class=\"p\">)</span>\n</code></pre></div>\n<p>使用 <code class=\"docutils literal notranslate\">circle_ops</code> 在 <code class=\"docutils literal notranslate\">circle</code> 上创建一个排除约束。</p>\n</dd></dl>\n\n</section>","rootId":"module-django.contrib.postgres.indexes","toc":[{"title":"BloomIndex","anchor":"bloomindex","children":[]},{"title":"BrinIndex","anchor":"brinindex","children":[]},{"title":"BTreeIndex","anchor":"btreeindex","children":[]},{"title":"GinIndex","anchor":"ginindex","children":[]},{"title":"GistIndex","anchor":"gistindex","children":[]},{"title":"HashIndex","anchor":"hashindex","children":[]},{"title":"SpGistIndex","anchor":"spgistindex","children":[]},{"title":"OpClass() 表达式","anchor":"opclass-expressions","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API 参考","url":"/zh-hans/5.0/ref/"},{"docname":"ref/contrib/index","title":"contrib 包","url":"/zh-hans/5.0/ref/contrib/"},{"docname":"ref/contrib/postgres/index","title":"django.contrib.postgres","url":"/zh-hans/5.0/ref/contrib/postgres/"}],"prev":{"docname":"ref/contrib/postgres/functions","title":"PostgreSQL 特有数据库函数","url":"/zh-hans/5.0/ref/contrib/postgres/functions/"},"next":{"docname":"ref/contrib/postgres/lookups","title":"PostgreSQL 特有查找","url":"/zh-hans/5.0/ref/contrib/postgres/lookups/"},"formats":{"html":"/zh-hans/5.0/ref/contrib/postgres/indexes/","markdown":"/zh-hans/5.0/ref/contrib/postgres/indexes.md","json":"/zh-hans/5.0/ref/contrib/postgres/indexes.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/ref/contrib/postgres/indexes.txt","official":"https://docs.djangoproject.com/zh-hans/5.0/ref/contrib/postgres/indexes/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}