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