跳转到主要内容

plan_filter

使用执行计划代价过滤阻止特定查询语句

概览

扩展包名版本分类许可证语言
pg_plan_filter1.0.0FEATPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
2810plan_filter否是是否否否-

Maintained RPM/DEB recipes and versioned source are 1.0.0; local package matrix on 2026-10-10 has RPM 1.0.0 and DEB 0.0.1. Retain maintained DEB 1.0.0; repository publication is a separate check.

版本

类型仓库版本PG 大版本包名依赖
EXTPIGSTY1.0.01817161514pg_plan_filter-
RPMPIGSTY1.0.01817161514pg_plan_filter_$v-
DEBPIGSTY1.0.01817161514postgresql-$v-pg-plan-filter-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
d12.aarch64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
d13.x86_64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
d13.aarch64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
u22.x86_64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
u22.aarch64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
u24.x86_64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
u24.aarch64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
u26.x86_64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
u26.aarch64
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1
PIGSTY 0.0.1

构建

您可以使用 pig build 命令构建 pg_plan_filter 扩展的 RPM / DEB 包:

pig build pkg pg_plan_filter         # 构建 RPM / DEB 包

安装

您可以直接安装 pg_plan_filter 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:

pig repo add pgsql -u          # 添加仓库并更新缓存

使用 pig 或者是 apt/yum/dnf 安装扩展:

安装
pig install pg_plan_filter;          # 当前活跃 PG 版本安装
pig
pig ext install -y pg_plan_filter -v 18  # PG 18
pig ext install -y pg_plan_filter -v 17  # PG 17
pig ext install -y pg_plan_filter -v 16  # PG 16
pig ext install -y pg_plan_filter -v 15  # PG 15
pig ext install -y pg_plan_filter -v 14  # PG 14
dnf
dnf install -y pg_plan_filter_18       # PG 18
dnf install -y pg_plan_filter_17       # PG 17
dnf install -y pg_plan_filter_16       # PG 16
dnf install -y pg_plan_filter_15       # PG 15
dnf install -y pg_plan_filter_14       # PG 14
apt
apt install -y postgresql-18-pg-plan-filter   # PG 18
apt install -y postgresql-17-pg-plan-filter   # PG 17
apt install -y postgresql-16-pg-plan-filter   # PG 16
apt install -y postgresql-15-pg-plan-filter   # PG 15
apt install -y postgresql-14-pg-plan-filter   # PG 14

预加载配置:

shared_preload_libraries = 'plan_filter';

用法

来源:

plan_filter 是 pg_plan_filter 1.0.0 的可加载库,根据配置的计划估算成本拒绝语句或事务。支持 PostgreSQL 14–18,没有需要创建的 SQL 扩展。

核心用法

shared_preload_libraries = 'plan_filter'
plan_filter.statement_cost_limit = 100000.0
plan_filter.transaction_cost_limit = 500000.0
plan_filter.filter_select_only = false
SELECT current_setting('plan_filter.module_loaded', true) IS NOT NULL AS active;

运行边界

将库追加到已有预加载列表并重启;开发和测试也可使用 LOAD。两个成本上限都默认为零,即不限制。plan_filter.statement_cost_limit 限制单条计划,也可能拒绝高成本的普通 EXPLAIN。plan_filter.transaction_cost_limit 对每次执行记账,包括反复执行预备语句;回滚到保存点不会返还预算。普通 EXPLAIN 不消耗事务预算,包含执行计划的工具命令则会计入。

plan_filter.filter_select_only 为真时两个上限只过滤 SELECT,但 SELECT 仍可能产生副作用。plan_filter.module_loaded 是只读的加载标志。修改上限需要超级用户或明确授予的参数设置权限,拒绝操作的 SQLSTATE 为 54001。成本是估算值而非运行时间,普通角色可以降低规划器成本设置绕过阈值。因此它适合防止意外负载,不能单独承担对抗恶意会话的安全边界。

这个页面对您有帮助吗?