2025-04-02 12:23:36.144 CST [10642] STATEMENT: CREATE EXTENSION pg_trgm; ERROR: could not access file "$libdir/pg_trgm": 没有那个文件或目录
时间: 2025-04-06 20:09:46 浏览: 33
### 关于 PostgreSQL 扩展 `pg_trgm` 安装问题的解决方案
当尝试在 PostgreSQL 中创建扩展时遇到错误 `ERROR: could not open extension control file "/usr/pgsql-10/share/extension/pg_trgm.control": No such file or directory`,这通常表明系统缺少必要的扩展控制文件或库文件。以下是针对此问题的具体解决方法:
#### 1. 验证扩展文件是否存在
确认目标路径 `/usr/pgsql-10/share/extension/pg_trgm.control` 是否存在该文件。如果不存在,则可能是由于安装过程中未正确配置扩展支持。
```bash
ls /usr/pgsql-10/share/extension/
```
如果没有找到 `pg_trgm.control` 文件,则需要重新构建或安装相关组件[^2]。
---
#### 2. 使用源码编译并安装扩展
如果通过包管理器安装 PostgreSQL 后仍然无法访问所需扩展,可以考虑从源码手动编译和安装扩展。具体操作如下:
##### 步骤说明:
- 进入 PostgreSQL 源码目录下的 `contrib/pg_trgm` 子目录。
- 编译并安装扩展。
```bash
cd /path/to/postgresql-source/contrib/pg_trgm
make && make install
```
完成上述命令后,再次验证扩展是否可用[^4]。
---
#### 3. 复制缺失的共享库到指定位置
某些情况下,可能是因为 `$libdir` 路径中的动态链接库文件缺失所致。此时可将对应版本的 PostgreSQL 动态库复制至运行环境中使用的 `$libdir` 目录下。
例如,在 Alpine Linux 或其他轻量级容器环境下,可能会因精简化的镜像而缺乏完整的依赖项。可通过以下方式修复:
```bash
cp -ri /usr/pgsql-14/lib/* /www/server/pgsql/lib/
awk 'BEGIN { cmd="cp -ri /usr/pgsql-14/lib/* /www/server/pgsql/lib/"; print "n" |cmd; }'
```
注意替换实际路径以匹配当前系统的 PostgreSQL 版本及部署结构[^1]。
---
#### 4. 更新或重置 PostgreSQL 数据库环境变量
确保 PostgreSQL 的 `$libdir` 和 `$sharedir` 变量指向正确的目录。可以在会话中临时设置这些变量或将它们永久写入配置文件(如 `.bashrc` 或服务启动脚本)。
```bash
export LD_LIBRARY_PATH=/usr/pgsql-14/lib:$LD_LIBRARY_PATH
export PGSHAREDIR=/usr/pgsql-14/share
```
随后重启 PostgreSQL 实例以应用更改。
---
#### 5. 升级或迁移 PostgreSQL 版本
对于较旧的大版本(如 v10),可能存在兼容性问题或者官方已停止维护的情况。建议升级至最新稳定版(如 v14 或更高)。在此类场景下,请参考文档逐步执行数据迁移过程[^5]。
---
### 总结
以上提供了多种途径来处理 PostgreSQL 扩展加载失败的问题。优先推荐的方法是从源码重新构建所需的模块;而对于特定平台上的特殊需求,则需调整其工作环境使之满足最低要求。
阅读全文
相关推荐



















