3

我将我的 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 中显示 2 个目录和 1 个文件9.6 data and initdb.log

4

4 回答 4

1

同意@interestedparty333。您可以找到确切丢失的库并将文件夹添加到 LD_LIBRARY_PATH。

例子:

find ~+ -name libpq.so.5

它可以给出如下结果(~+ 作为查找的结果给出绝对路径):

/home/myuser/postgresql-12.9/src/interfaces/libpq/libpq.so.5

因此,您可以向 LD_LIBRARY_PATH 添加一个文件夹(绝对路径),例如:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/myuser/postgresql-12.9/src/interfaces/libpq/

现在 psql 应该可以正常工作了。如果您需要额外的库,请像上面一样查找和添加每个缺少的库。

于 2021-11-24T11:13:50.707 回答
1

psql:符号查找错误:psql:未定义符号:PQsetErrorContextVisibility

这意味着您的副本psql正在寻找一个动态符号,libpq.so其中您的路径中的版本没有。

你有自定义编译版本psql吗?而且,如果是这样,您将不得不针对 9.6 提供的较新的 libpq 构建它。

于 2018-09-12T21:41:37.750 回答
1

尝试

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your postgres lib directory>

例如

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/ 

(将@vaotsun 的评论变成答案)

于 2020-09-18T18:39:04.613 回答
0

因为red hat 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

In 不会建议我最大的敌人使用来自 SCL 存储库的软件代替外部存储库(参见 centos 7 上的 postgresql 96)。

于 2019-11-01T10:36:25.127 回答