无法加载库“/usr/lib/pgsql/plpgsql.so”和未定义符号:PinPortal
Posted
技术标签:
【中文标题】无法加载库“/usr/lib/pgsql/plpgsql.so”和未定义符号:PinPortal【英文标题】:Could not load library "/usr/lib/pgsql/plpgsql.so" & undefined symbol: PinPortal 【发布时间】:2011-08-25 01:22:03 【问题描述】:我已经在 CentOS 5 机器上运行 Davical 一段时间了,没有任何问题。
然而,昨天我安装了 Trac 错误跟踪器,最终迫使我通过 Yum 运行完整更新,更新了一大堆包。
我似乎无法准确找出问题所在,而且花在谷歌上的时间似乎并没有带来太多的想法。
有没有人遇到过同样的问题,或者任何人都可以指出一种更好地识别发生了什么的方法?
非常感谢!
完整的错误读数:
[Wed May 11 17:52:53 2011] [error] davical: LOG: always: Query: QF: SQL error "58P01" - ERROR: could not load library "/usr/lib/pgsql/plpgsql.so ":/usr/lib/pgsql/plpgsql.so:未定义符号:PinPortal"
检查文件是否存在
[@shogun ~]# tree -a /usr/lib/pgsql/ | grep "plpgsql"
|-- plpgsql.so
安装的 pg 版本
[@shogun ~]# pg_config | grep "版本"
版本 = PostgreSQL 8.1.23
[@shogun postgresql-8.3.8]# yum list installed | grep '发布'
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 已安装
【问题讨论】:
它是 8.1.23 版 - 老实说,更新了很多软件包,我什至没有注意到。我觉得我的 Yum 也没有历史经理,有没有办法知道你知道吗? 嗯。我只通过 Yum 安装过它,并且在那里检查似乎只安装了一个版本: 【参考方案1】:我之前也遇到过这个问题,虽然是用 8.4 而不是 8.1,但我相信问题是一样的。
最近对所有支持的 PostgreSQL 维护分支进行了小升级,在服务器中引入了函数PinPortal
,并让 PL/pgSQL 使用它。因此,如果您将较新版本的plpgsql.so
与较旧版本的服务器一起使用,您将收到此错误。在您的情况下,更改发生在 8.1.21 和 8.1.22 之间。即使您安装的所有软件包都显示较新版本,您也需要重新启动服务器以确保您实际使用较新版本。
问题是,一旦您安装了较新的 PL/pgSQL,它将被下一个启动的会话使用,但较新的服务器二进制文件在您重新启动服务器之前不会被使用。因此,如果您的升级过程没有立即重新启动服务器,那么一旦尝试使用 PL/pgSQL,您总是会收到这些错误。如果这确实是问题所在,您可能需要查看服务器未重新启动的原因。
【讨论】:
最近一次 MacPorts 升级后,我也遇到了同样的情况。新的 MacPorts postgres 包提供选择和加载功能,同时执行并可能杀死正在运行的服务器,launchd 将重新启动一个新的完美的服务器。以上是关于无法加载库“/usr/lib/pgsql/plpgsql.so”和未定义符号:PinPortal的主要内容,如果未能解决你的问题,请参考以下文章