CONFIGURATION PARAMETER客户端连接默认值 / 共享库预载入
session_preload_libraries
列出每个后端在会话开始时预加载的共享库。
Lists shared libraries to preload into each backend.
字符串 会话(超级用户) 引入 9.4 现存至 20 devel 0 次默认值变更
- 类型
- 字符串string
- 上下文
- 会话(超级用户)超级用户可在会话内用 SET 修改
- 默认值
空字符串原始值 ''- 引入版本
- 9.4
- 状态
- 现存
版本轨迹
相对 PostgreSQL 17 无变化。
默认值变迁
默认值自 PostgreSQL 9.4 起没有变过。带单位的取值换算成了可读形式,原始的 boot_val 与单位写在悬浮提示里。
手册说明
这个变量指定在连接开始时要预加载的一个或多个共享库。 它包含一个逗号分隔的库名称列表,其中每个名称的解释方式与LOAD命令相同。 条目之间的空格会被忽略;如果需要在名称中包含空格或逗号,请用双引号括起库名称。 参数值仅在连接开始时生效。后续更改不会生效。如果指定的库未找到,连接尝试将失败。 只有超级用户和具有适当SET权限的用户才能更改此设置。
这个特性的意图是允许在特定会话中载入调试用的或者测量性能的库,而不需要显式的给出一个 LOAD命令。例如,通过用ALTER ROLE SET设置这个参数可以 为一个给定用户名下的所有会话启用auto_explain。还有,无需重启 服务器就能更改这个参数(但是只有新会话启动时才会生效),这样可以以这种方式更容易地增 加新模块,即便它们会应用到所有会话。
和shared_preload_libraries不同,相对于在库被第一次使用 时载入它,在会话开始时载入库并没有什么性能优势。不过,当使用连接池时这样做还是有一些 优势。
机制详解
session_preload_libraries:列出每个后端在会话开始时预加载的共享库。列表会加载到每个新的匹配后端中,且只能由超级用户或适当授权角色设置;库缺失会拒绝连接。
虽然 session_preload_libraries 无需重启服务器即可配置,但只有新后端启动时才处理库列表;在既有连接中修改不会卸载或追溯加载模块。
库发现与预加载会和已安装二进制版本、扩展控制文件、服务器或后端启动,以及模块自身 GUC 相互作用。
调优建议
按典型负载给出的取值思路,不是放之四海皆准的配方:实际取值要看数据量、并发度与硬件。
-
OLTP在线事务处理
不应通用调优 session_preload_libraries。只加载或暴露经过评审的功能所需模块,验证二进制兼容性,并在上线前演练故障恢复。
-
OLAP分析与批处理
只有扩展或 JIT 需求经过测量后才使用 session_preload_libraries,并计入后端启动、常驻内存与连接池下的行为。
-
小规格低配实例与开发机
尽量精简 session_preload_libraries。模块缺失或不兼容可能拒绝连接或阻止启动,每个预加载库也会占用稀缺地址空间或内存。
常见问题
- 只在一个会话中修改 session_preload_libraries,却认为角色默认值、数据库默认值或其他池化会话也已随之改变。
- 指定缺失或 ABI 不兼容模块,导致连接失败或服务器无法启动。
- 把搜索或预加载路径当作无害配置,忽略它决定服务器信任哪些本地代码。
- 没有回滚计划及客户端或运维兼容测试,就全局修改 session_preload_libraries。
演化历史
相邻两个大版本之间的差异,新的在前。版本号链到该版的快照。
-
PostgreSQL 20 ← 19 沿用 19
事实沿用 19
-
PostgreSQL 9.4 ← 9.3 新增此参数
PostgreSQL 9.4 起可用
逐版本快照
每个收录版本里的 7 项事实,与上一个存在的版本不同的格子带底色。版本号链到该版。
| 版本 | 默认值 | 单位 | 上下文 | 类型 | 最小值 | 最大值 | 枚举值 |
|---|---|---|---|---|---|---|---|
| 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 |
字符串 | 重启生效 | 空字符串 |
— | |
| 列出服务器启动时预加载的共享库。 | 现存 | ||||