↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

Wiki / 配置参数

constraint_exclusion

英文手册覆盖始于 PostgreSQL 7.4. 来源历史与运行验证各自保留独立版本边界。

当前阅读 PG 18·选择有来源记录的版本

boot val
partition
category
Query Tuning / Other Planner Options
context
user
documented
true
enumvals
partition, on, off
extra desc
Table scans will be skipped if their constraints guarantee that no rows match the query.
lang
en
max val
未知
metadata version
18
min val
未知
name
constraint_exclusion
short desc
Enables the planner to use constraints to optimize queries.
source
pg-settings-source-snapshot
unit
未知
vartype
enum

版本定义 PG 18

控制查询规划器对表约束的使用,以优化查询。constraint_exclusion的允许值是on(对所有表检查约束)、off(从不检查约束)和partition(只对继承的子表和UNION ALL子查询检查约束)。partition是默认设置。它通常与传统的继承树一起使用来提高性能。

当此参数允许对某个表使用约束排除时,规划器会比较查询条件与该表的CHECK约束,并且忽略那些条件违反约束的表扫描。例如:

CREATE TABLE parent(key integer, ...);
CREATE TABLE child1000(check (key between 1000 and 1999)) INHERITS(parent);
CREATE TABLE child2000(check (key between 2000 and 2999)) INHERITS(parent);
...
SELECT * FROM parent WHERE key = 2400;

在启用约束排除时,这个SELECT将完全不会扫描child1000,从而提高性能。

目前,约束排除仅在通常用于通过继承树实现表分区的情况下默认启用。为所有表启用它会增加额外的规划开销,这在简单查询上相当明显,而且通常不会为简单查询带来好处。如果没有通过传统继承方式进行分区的表,你可能希望完全关闭它。(注意,分区表的等效功能由另一个参数enable_partition_pruning控制。)

更多关于使用约束排除实现分区的信息请参阅第 5.12.5 节。

比较版本

来源引用

完整定义与证据 JSON

定义来源

center · PostgreSQL 18 · english-manuals:2bf8a74bf8b745bad29c5639a2cbe312a76e4c0d9c5164d6288877673ea61bd9

正文语言: zh-Hans · 2026-09-11@29c86d9