无法加载库"/usr/lib/pgsql/plpgsql.so" & 未定义符号: PinPortal

6 投票
1 回答
5845 浏览
提问于 2025-04-16 17:35

我在一台运行CentOS 5的机器上使用Davical已经有一段时间了,一直没有问题。

不过昨天,我安装了Trac这个缺陷跟踪工具,结果让我不得不通过Yum进行一次全面更新,这次更新了很多软件包。

现在我搞不清楚到底出了什么问题,花了很多时间在网上搜索也没有找到什么有用的线索。

有没有人遇到过同样的问题,或者能给我一些建议,帮我更好地找出问题所在?

非常感谢!

完整的错误信息:

[2011年5月11日 17:52:53] [错误] davical: 日志: 总是: 查询: QF: SQL错误 "58P01" - 错误: 无法加载库 "/usr/lib/pgsql/plpgsql.so": /usr/lib/pgsql/plpgsql.so: 未定义的符号: PinPortal

检查文件是否存在

[@shogun ~]# tree -a /usr/lib/pgsql/ | grep "plpgsql"

|-- plpgsql.so

安装的PostgreSQL版本

[@shogun ~]# pg_config | grep "VERSION"

版本 = PostgreSQL 8.1.23

[@shogun postgresql-8.3.8]# yum list installed | grep 'post'

postgresql.i386 8.1.23-1.el5_6.1 已安装

postgresql-devel.i386 8.1.23-1.el5_6.1 已安装

postgresql-libs.i386 8.1.23-1.el5_6.1 已安装

postgresql-python.i386 8.1.23-1.el5_6.1 已安装

postgresql-server.i386 8.1.23-1.el5_6.1 已安装

1 个回答

8

我之前也遇到过这个问题,不过那时是8.4版本,而不是8.1,但我觉得问题是一样的。

最近对PostgreSQL所有支持的维护版本进行了一次小升级,新增了一个叫PinPortal的功能,并让PL/pgSQL使用它。所以如果你用的是新版本的plpgsql.so,但服务器却是旧版本的,就会出现这个错误。在你的情况下,这个变化发生在8.1.21和8.1.22之间。即使你安装的所有包都显示是新版本,你也需要重启服务器,才能确保真的在使用新版本。

问题在于,一旦你安装了新的PL/pgSQL,它会在下一个会话中被使用,但新的服务器程序在你重启服务器之前是不会被用到的。所以如果你的升级过程没有立即重启服务器,一旦有东西尝试使用PL/pgSQL,就一定会出现这些错误。如果这真的是问题所在,你可能需要检查一下为什么你的服务器没有重启。

撰写回答