psql: symbol lookup error: psql: undefined symbol: PQsetErrorContextVisibility
psql: symbol lookup error: psql: undefined symbol: PQsetErrorContextVisibility
我将我的 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 中的 2 个目录和 1 个文件 bash 9.6 data and initdb.log
.
psql: symbol lookup error: psql: undefined symbol: PQsetErrorContextVisibility
这意味着您的 psql
副本正在 libpq.so
中寻找动态符号,而您的路径中的版本没有。
你有psql
的自定义编译版本吗?而且,如果是这样,您将必须针对 9.6 提供的更新的 libpq 构建它。
因为 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)。
尝试
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your postgres lib directory>
例如
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/
(将@vaotsun 的评论转化为答案)
同意@interestedparty333。
您可以找到确切缺少的库并将文件夹添加到 LD_LIBRARY_PATH.
示例:
find ~+ -name libpq.so.5
它可以给出如下结果(~+ 给出绝对路径作为 find 的结果):
/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 应该可以正常工作了。
如果您需要额外的库,请像上面那样为每个缺失的库找到并添加。
我将我的 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 中的 2 个目录和 1 个文件 bash 9.6 data and initdb.log
.
psql: symbol lookup error: psql: undefined symbol: PQsetErrorContextVisibility
这意味着您的 psql
副本正在 libpq.so
中寻找动态符号,而您的路径中的版本没有。
你有psql
的自定义编译版本吗?而且,如果是这样,您将必须针对 9.6 提供的更新的 libpq 构建它。
因为 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)。
尝试
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<your postgres lib directory>
例如
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64/
(将@vaotsun 的评论转化为答案)
同意@interestedparty333。 您可以找到确切缺少的库并将文件夹添加到 LD_LIBRARY_PATH.
示例:
find ~+ -name libpq.so.5
它可以给出如下结果(~+ 给出绝对路径作为 find 的结果):
/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 应该可以正常工作了。 如果您需要额外的库,请像上面那样为每个缺失的库找到并添加。