我将postgres版本从9.2.24切换到9.6,因为我需要jsonb兼容性以及其他最新功能。我在centos 7上运行虚拟机。
我决定清除所有现有的postgres实例(由于正在逐步升级,因此几乎为空),然后安装9.6。但是,一旦进入postgres shell,当我输入psql
时,会收到以下错误:
psql: symbol lookup error: psql: undefined symbol: PQsetErrorContextVisibility
我假设我需要更改psql正在寻找的路径,以便它正确连接,但是我不确定要指向哪里。
注意:ls
在postgres bash 9.6 data and initdb.log
中显示2个目录和1个文件。
答案 0 :(得分:1)
psql:符号查找错误:psql:未定义符号:PQsetErrorContextVisibility
这意味着您的psql
副本正在libpq.so
中查找动态符号,而该符号在您的路径中没有。
您有psql
的自定义编译版本吗?而且,如果是这样,则必须针对9.6提供的较新的libpq构建它。
答案 1 :(得分:0)
正因为红色的帽子SCL面对了这一点。 我逃脱了以下内容。
ln -s /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.rh-postgresql96-5.9 /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.5
ln -s /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.5 /usr/lib/libpq.so.5
对于使用SCL存储库中的软件代替外部存储库,我不会建议我最大的敌人(请参阅centos 7上的postgresql 96)。
答案 2 :(得分:0)
尝试
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your postgres lib directory>
例如
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/
(将@vaotsun的评论变成答案)