CONFIGURATION PARAMETER客户端连接默认值 / 共享库预载入
shared_preload_libraries
列出服务器启动时预加载的共享库。
Lists shared libraries to preload into server.
字符串 重启生效 引入 9.0(基线) 现存至 20 devel 0 次默认值变更
- 类型
- 字符串string
- 上下文
- 重启生效只能在服务器启动时设置,修改后需要重启
- 默认值
空字符串原始值 ''- 引入版本
- 9.0(基线)
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
默认值自 PostgreSQL 9.0 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
这个变量指定一个或者多个要在服务器启动时预载入的共享库。 它包含一个由逗号分隔的库名列表,其中每个名称都会按LOAD命令的方式解析。 项之间的空格会被忽略,如果需要在库名中包含空格或者逗号,请把库名放在双引号内。 这个参数只能在服务器启动时设置。 如果指定的库没有找到,服务器将无法启动。
有些库需要执行只能在postmaster启动时发生的特定操作,例如分配共享内存、保留轻量级锁 或者启动后台工作者。这些库必须通过这个参数在服务器启动时载入。每个库的详情请见文档。
其他库也能被预载入。通过预载入一个共享库,当该库被第一次使用时就可以避免库的启动时间。 不过,启动每个新服务器进程的时间可能会略有增加,即使该进程从不使用该库。因此,推荐只 把这个参数用于那些要在大多数会话中使用的库上。还有,改变这个参数要求重启服务器,因此 对于短期的调试任务来说这不是好的选择,应该转用 session_preload_libraries。
在 Windows 主机上,在服务器启动时预载入一个库并不会减少启动每个新服务器进程所需的 时间;每一个服务器进程将会重新载入预载入的库。不过,对于那些要在postmaster启动时 执行操作的库来说,Windows 主机上的 shared_preload_libraries任然有用。
机制详解
shared_preload_libraries:列出服务器启动时预加载的共享库。库在共享内存定型前由 postmaster 一次性加载,可提供后续 LOAD 无法获得的钩子与共享状态;任一库缺失都会阻止服务器启动。
shared_preload_libraries 属于 POSTMASTER 上下文:PostgreSQL 在服务器启动时读取它,重新加载配置或会话 SET 都不能使新值生效。
库发现与预加载会和已安装二进制版本、扩展控制文件、服务器或后端启动,以及模块自身 GUC 相互作用。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
不应通用调优 shared_preload_libraries。只加载或暴露经过评审的功能所需模块,验证二进制兼容性,并在上线前演练故障恢复。
-
OLAP分析与批处理
只有扩展或 JIT 需求经过测量后才使用 shared_preload_libraries,并计入后端启动、常驻内存与连接池下的行为。
-
小规格低配实例与开发机
尽量精简 shared_preload_libraries。模块缺失或不兼容可能拒绝连接或阻止启动,每个预加载库也会占用稀缺地址空间或内存。
常见问题
- 期待重新加载或 SET 激活 shared_preload_libraries,而它实际需要受控重启服务器。
- 指定缺失或 ABI 不兼容模块,导致连接失败或服务器无法启动。
- 把搜索或预加载路径当作无害配置,忽略它决定服务器信任哪些本地代码。
- 没有回滚计划及客户端或运维兼容测试,就全局修改 shared_preload_libraries。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 9.4 ← 9.3 仅描述更新
分类
Resource Usage / Kernel ResourcesClient Connection Defaults / Shared Library Preloading
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 9.0 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 9.1 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 9.2 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 9.3 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 9.4 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 9.5 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 9.6 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 10 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 11 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 12 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 13 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 14 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 15 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 16 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 17 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 18 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 19 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
| 20 沿用 | 空字符串 |
— |
重启生效 |
字符串 |
— |
— |
— |
参考资料
同类参数
| 参数 | 类型 | 上下文 | 默认值 | 版本变动 | 最近变更 |
|---|---|---|---|---|---|
| 共享库预载入 4 | |||||
jit_provider |
字符串 | 重启生效 | llvmjit |
— | |
| 设置要使用的 JIT 提供程序。 | 现存 | ||||
local_preload_libraries |
字符串 | 会话 | 空字符串 |
9.51 次 | |
| 列出每个后端可由非特权用户预加载的共享库。 | 现存 | ||||
session_preload_libraries |
字符串 | 会话(超级用户) | 空字符串 |
— | |
| 列出每个后端在会话开始时预加载的共享库。 | 现存 | ||||
shared_preload_libraries |
字符串 | 重启生效 | 空字符串 |
— | |
| 列出服务器启动时预加载的共享库。 | 现存 | ||||