pgextwlist

PostgreSQL扩展白名单功能

概览

扩展包名版本分类许可证语言
pgextwlist1.19SECPostgreSQLC
ID扩展名BinLibLoadCreateTrustReloc模式
7390pgextwlist-
相关扩展ddlx pgdd pg_permissions adminpack pgaudit set_user pg_catcheck noset

missing pg18 on el

版本

类型仓库版本PG 大版本包名依赖
EXTMIXED1.191817161514pgextwlist-
RPMPIGSTY1.191817161514pgextwlist_$v-
DEBPGDG1.191817161514postgresql-$v-pgextwlist-
OS / PGPG18PG17PG16PG15PG14
el8.x86_64
el8.aarch64
el9.x86_64
el9.aarch64
el10.x86_64
el10.aarch64
d12.x86_64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
d12.aarch64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
d13.x86_64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
d13.aarch64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
u22.x86_64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
u22.aarch64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
u24.x86_64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
u24.aarch64
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19
PGDG 1.19

构建

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

pig build pkg pgextwlist         # 构建 RPM 包

安装

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

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

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

pig install pgextwlist;          # 当前活跃 PG 版本安装
pig ext install -y pgextwlist -v 18  # PG 18
pig ext install -y pgextwlist -v 17  # PG 17
pig ext install -y pgextwlist -v 16  # PG 16
pig ext install -y pgextwlist -v 15  # PG 15
pig ext install -y pgextwlist -v 14  # PG 14
dnf install -y pgextwlist_18       # PG 18
dnf install -y pgextwlist_17       # PG 17
dnf install -y pgextwlist_16       # PG 16
dnf install -y pgextwlist_15       # PG 15
dnf install -y pgextwlist_14       # PG 14
apt install -y postgresql-18-pgextwlist   # PG 18
apt install -y postgresql-17-pgextwlist   # PG 17
apt install -y postgresql-16-pgextwlist   # PG 16
apt install -y postgresql-15-pgextwlist   # PG 15
apt install -y postgresql-14-pgextwlist   # PG 14

预加载配置

shared_preload_libraries = 'pgextwlist';

用法

pgextwlist: PostgreSQL 扩展白名单

pgextwlist 实现扩展白名单功能:只有明确允许的扩展才能安装,白名单中的扩展即使由非超级用户请求也会以超级用户权限安装。

配置

添加到 postgresql.conf

local_preload_libraries = 'pgextwlist'
extwlist.extensions = 'hstore,cube,pg_stat_statements'

或按角色设置:

ALTER ROLE adminuser SET extwlist.extensions = 'pg_stat_statements, postgis';
参数描述
extwlist.extensions逗号分隔的白名单扩展列表
extwlist.custom_path自定义前/后脚本的文件系统路径

行为

非超级用户可以安装白名单扩展:

-- 允许(hstore 在白名单中)
CREATE EXTENSION hstore;

-- 阻止(不在白名单中)
CREATE EXTENSION earthdistance;
-- ERROR: extension "earthdistance" is not whitelisted

对于白名单扩展,CREATE EXTENSIONDROP EXTENSIONALTER EXTENSION ... UPDATECOMMENT ON EXTENSION 操作以超级用户身份运行。

自定义脚本

将脚本放在 ${extwlist.custom_path}/extname/ 目录:

脚本时机
before--1.0.sql安装 1.0 版本之前
before-create.sqlCREATE 之前(回退)
after--1.0.sql安装 1.0 版本之后
after-create.sqlCREATE 之后(回退)
before-update.sql / after-update.sqlALTER EXTENSION UPDATE 前后
before-drop.sql / after-drop.sqlDROP EXTENSION 前后

自定义脚本支持模板变量:@extschema@@current_user@@database_owner@


最后修改 2026-03-14: update extension metadata (953cbd0)