PostgreSQL 特有模型索引

以下是 PostgreSQL 特有的 索引 可以从 django.contrib.postgres.indexes 模块中获得。

BloomIndex

class BloomIndex(*expressions, length=None, columns=(), **options)

创建一个 bloom 索引。

要使用这个索引访问,你需要激活 PostgreSQL 上的 bloom 扩展。你可以使用 BloomExtension 迁移操作来安装它。

length 参数提供一个从 1 到 4096 的整数位,用于指定每个索引条目的长度。PostgreSQL 的默认值是 80。

columns 参数取一个元组或最多 32 个值的列表,这些值是 1 到 4095 的整数位。

BrinIndex

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

创建一个 BRIN 索引

autosummarize 参数设置为 True,启用 autovacuum 进行 自动汇总

pages_per_range 参数取一个正整数。

BTreeIndex

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

创建一个 B 树索引。

fillfactor 参数提供一个从 10 到 100 的整数值,以调整索引页的打包程度。PostgreSQL 的默认值是 90。

GinIndex

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

创建一个 gin 索引

要想在不在 内置运算符类 的数据类型上使用这个索引,需要在 PostgreSQL 上激活 btree_gin 扩展 。你可以使用 BtreeGinExtension 迁移操作来安装它。

fastupdate 参数设置为 False,以禁用 PostgreSQL 中默认启用的 GIN 快速更新技术

将一个整数值以千字节为单位提供给 gin_pending_list_limit 参数,以调整当启用 fastupdate 时用于限制 GIN 待处理列表的最大大小。

GistIndex

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

创建一个 GiST 索引 。这些索引在空间字段上会自动创建 spatial_index=True。它们在其他类型上也很有用,比如 HStoreField 或者 range fields

要在不在内置的 gist 操作类 的数据类型上使用这个索引,需要在 PostgreSQL 上激活 btree_gist 扩展 。你可以使用 BtreeGistExtension 迁移操作来安装它。

buffering 参数设置为 TrueFalse,手动启用或禁用索引的 buffering build

fillfactor 参数提供一个从 10 到 100 的整数值,以调整索引页的打包程度。PostgreSQL 的默认值是 90。

HashIndex

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

创建一个哈希索引。

fillfactor 参数提供一个从 10 到 100 的整数值,以调整索引页的打包程度。PostgreSQL 的默认值是 90。

SpGistIndex

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

创建 SP-GIST 索引

fillfactor 参数提供一个从 10 到 100 的整数值,以调整索引页的打包程度。PostgreSQL 的默认值是 90。

Changed in Django 4.1:

在 PostgreSQL 14+ 中新增了对 SP-GiST 索引的覆盖支持。

OpClass() 表达式

class OpClass(expression, name)

一个 OpClass() 表达式表示带有自定义 operator classexpression,它可用于定义功能索引、功能唯一约束或排除约束。要使用它,您需要在 INSTALLED_APPS 中添加 'django.contrib.postgres'。将 name 参数设置为 operator class 的名称。

例子:

Index(
    OpClass(Lower("username"), name="varchar_pattern_ops"),
    name="lower_username_idx",
)

使用 varchar_pattern_opsLower('username') 上创建一个索引。:

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

使用 text_pattern_opsUpper('description') 上创建一个唯一约束。:

ExclusionConstraint(
    name="exclude_overlapping_ops",
    expressions=[
        (OpClass("circle", name="circle_ops"), RangeOperators.OVERLAPS),
    ],
)

使用 circle_opscircle 上创建一个排除约束。

Changed in Django 4.1:

新增了对排除约束的支持。

Back to Top