CONFIGURATION PARAMETER复制 / 发送服务器
output_plugin_libraries
列出安装在 dynamic_library_path 所指定位置中、同时也受信任、可供复制客户端用作逻辑输出插件的库。
Lists libraries that may be named as logical decoding output plugins.
字符串 会话(超级用户) 引入 14 现存至 20 devel 0 次默认值变更
- 类型
- 字符串string
- 上下文
- 会话(超级用户)超级用户可在会话内用 SET 修改
- 默认值
pgoutput, test_decoding- 分类
- 复制 / 发送服务器
- 引入版本
- 14
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
已记录的默认值在 PostgreSQL 14–19 之间未变。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
列出安装在 dynamic_library_path 所指定位置中、同时也受信任、可供复制客户端用作逻辑输出插件的库。任何针对其他库的逻辑解码或复制请求都将被拒绝。所有用户都受此限制。默认值为 'pgoutput, test_decoding',它们是标准
PostgreSQL 发行版中包含的两个逻辑输出插件。(表 19.2 说明了将它们从此列表中移除后系统的行为。)
其格式为以逗号分隔的库名称列表,每个名称的解释方式与
LOAD 命令相同(但逻辑解码客户端指定的插件名称必须与列表中的一个条目完全匹配,大小写或路径结构不得有变化)。条目之间的空白会被忽略;如果库名称中需要包含空白或逗号,请用双引号将其括起。
服务器管理员有责任确保,加载添加到此列表中的库时,不会无意中向非超级用户授予额外权限。
注意
从没有 output_plugin_libraries 参数的版本更新服务器时,以下查询可帮助构造所有持久逻辑复制槽所需的插件列表:
SELECT DISTINCT plugin FROM pg_replication_slots WHERE plugin IS NOT NULL;
调整 output_plugin_libraries 之前,请仔细审查该列表以确保安全。
上述查询只能显示过去某个时刻已成功添加到复制槽的插件。新近被拒绝的请求将以类似以下消息出现在日志中:
ERROR: library "..." may not be used as an output plugin DETAIL: The configuration parameter "output_plugin_libraries" (currently 'pgoutput, test_decoding') does not name this library as a trusted output plugin. HINT: If it is safe for all REPLICATION users to use this library as an output plugin, add it to "output_plugin_libraries" and reload the server configuration.
表 19.2. 默认允许的插件
| 插件 | 描述 |
|---|---|
| pgoutput |
用于逻辑复制的核心插件。从 output_plugin_libraries 中移除 pgoutput,会导致后续订阅连接和订阅复制槽的维护报错失败。(请注意,服务器采用这种配置时,现有复制工具可能无法妥善处理这种情况。)
|
| test_decoding |
将 WAL 流解码为人类可读的文本表示。pg_recvlogical 默认使用此插件,因此从 output_plugin_libraries 中移除它后,该工具将无法使用,除非安装了替代插件,并通过 --plugin 显式选择该插件。
|
机制详解
列出可作为逻辑解码输出插件指定的库。超级用户或获授 SET 权限的角色可在相应的会话或配置作用域中修改它。
逻辑解码只接受该服务端白名单中的输出插件库名,按 LOAD 规则解释并要求插件名精确匹配。加入库是信任决策,因为插件代码在服务器进程内部执行。
应把 output_plugin_libraries 与 wal_level、max_wal_senders、max_replication_slots 一起监控和变更。先在对应角色与真实负载上验证,再按其 superuser context 选择会话修改、reload 或 restart;历史默认值并不等于当前有效值。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
只列出已安装、已审计且确有消费者使用的输出插件;修改后用最低权限逻辑复制用户验证,并把插件升级纳入服务器发布。
-
OLAP分析与批处理
ETL 解码插件同样是进程内代码,不要为方便使用通配或宽泛路径;验证大事务的内存、WAL 保留与插件输出。
-
小规格低配实例与开发机
不做逻辑解码就保留内置小白名单;增加 wal2json 等插件前确认包来源、版本兼容与维护责任。
常见问题
- 在错误的主库、备库、发送端或订阅端角色上修改。
- 只看字节/时间配置,不监控真实复制延迟、槽位置与 worker 状态。
- 故障切换后新主库缺少与旧主库一致的容量或依赖。
- 用无限等待或无限 WAL 保留掩盖失效消费者。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 14 ← 13 新增此参数
PostgreSQL 14 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 14 | pgoutput, test_decoding |
— |
会话(超级用户) |
字符串 |
— |
— |
— |
| 15 | pgoutput, test_decoding |
— |
会话(超级用户) |
字符串 |
— |
— |
— |
| 16 | pgoutput, test_decoding |
— |
会话(超级用户) |
字符串 |
— |
— |
— |
| 17 | pgoutput, test_decoding |
— |
会话(超级用户) |
字符串 |
— |
— |
— |
| 18 | pgoutput, test_decoding |
— |
会话(超级用户) |
字符串 |
— |
— |
— |
| 19 | pgoutput, test_decoding |
— |
会话(超级用户) |
字符串 |
— |
— |
— |
| 20 | — | — | — | 字符串 |
— | — | — |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 发送服务器 12 | |||||
idle_replication_slot_timeout |
整数 | 重载生效 | 0 s |
— | |
| 使保持空闲状态(未被复制连接使用)超过此持续时间的复制槽失效。 | 现存 | ||||
max_repack_replication_slots |
整数 | — | — | ||
| 指定可供 REPACK 命令使用的复制槽最大数量。 | 现存 | ||||
max_replication_slots |
整数 | 重启生效 | 10 |
102 次 | |
| 指定服务器可以支持的复制槽(见第 26.2.6 节)最大数量。 | 现存 | ||||
max_slot_wal_keep_size |
整数 | 重载生效 | -1 MB |
— | |
| 指定检查点时复制槽允许在 pg_wal 目录中保留的 WAL 文件最大总量。 | 现存 | ||||
max_wal_senders |
整数 | 重启生效 | 10 |
103 次 | |
| 指定来自备库或流式基础备份客户端的最大并发连接数(即同时运行的 WAL 发送进程的最大数量)。 | 现存 | ||||
output_plugin_libraries |
字符串 | 会话(超级用户) | pgoutput, test_decoding |
— | |
| 列出安装在 dynamic_library_path 所指定位置中、同时也受信任、可供复制客户端用作逻辑输出插件的库。 | 现存 | ||||
replication_timeout |
整数 | 重载生效 | 1 min |
— | |
| 终止不活动时间超过指定毫秒数的复制连接。 | 于 9.3 移除 | ||||
track_commit_timestamp |
布尔 | 重启生效 | off |
— | |
| 记录事务的提交时间。 | 现存 | ||||
wal_keep_segments |
整数 | 重载生效 | 0 |
— | |
| 指定在 pg_wal 目录中保留的过去日志文件段的最小数量,以便备库可能需要获取它们来进行流复制。 | 于 13 移除 | ||||
wal_keep_size |
整数 | 重载生效 | 0 B |
— | |
| 指定在 pg_wal 目录中保留的旧 WAL 文件的最小总量,以便备库需要时获取这些文件进行流复制。 | 现存 | ||||
wal_sender_shutdown_timeout |
整数 | — | — | ||
| 指定服务器在关闭期间等待所有 WAL 数据复制到接收端的最长时间。 | 现存 | ||||
wal_sender_timeout |
整数 | 会话 | 1 min |
121 次 | |
| 终止非活动时间超过此值的复制连接。 | 现存 | ||||