postgresql 加载共享库时出错:库编号5:无法打开共享目标文件:无此文件或目录

u4vypkhs  于 2023-03-08  发布在  PostgreSQL
关注(0)|答案(8)|浏览(425)

我尝试在运行于Debian上的PostgreSQL 9.0.4服务器上执行pg_dump,并收到以下错误:

./pg_dump: error while loading shared libraries: libpq.so.5: cannot open shared object file: No such file or directory

libpq.so.5是指向libpq.so.5.3的链接,如下所示

lrwxrwxrwx 1 root root     12 Jun 27 16:24 libpq.so.5 -> libpq.so.5.3
-rwxr-xr-x 1 root root 180749 Jun 21 02:43 libpq.so.5.3

我到底做错了什么?

u2nhd7ah

u2nhd7ah1#

试试这个:
1:知道libpq.so.5的路径

find / -name libpq.so.5

输出示例:/usr/pgsql-9.4/lib/libpq.so.5如果未找到任何内容,请检查是否已安装适合您的postgresql版本和操作系统平台的postgresql-libs
2:符号链接"众所周知"的库路径中的库,如/usr/lib

ln -s /usr/pgsql-9.4/lib/libpq.so.5 /usr/lib/libpq.so.5

注意:如果您的平台是64位,您还必须符号链接到64位库路径:

ln -s /usr/pgsql-9.4/lib/libpq.so.5 /usr/lib64/libpq.so.5

3:要快乐!

v09wglhw

v09wglhw2#

这些libpq文件在哪个目录下?你可以尝试设置环境变量LD_LIBRARY_PATH指向这个目录,或者确保它在标准位置。
另外,为什么libpq.so.5链接没有显示在“如下所示”部分?也许你应该直接运行ldconfig

vawmfj5a

vawmfj5a3#

Ubuntu 21.10以上版本
由于这是搜索结果中最多的错误,我将添加一个更新的答案。我在尝试启动django服务器时收到了这个错误。
我没有安装postgres的东西。
试试看:

sudo apt install libpq-dev

参见:

iswrvxsc

iswrvxsc4#

我在RHEL 6.5上的Postgres 9.5上也收到了同样的错误消息,导致我发了这篇文章。但是对文件libpq.so.5的查找没有返回任何东西,这使事情更加混乱。
最后,以下符号链接使其运行

ln -s /opt/rh/rh-postgresql95/root/usr/lib64/libpq.so.rh-postgresql95-5  /usr/lib64/libpq.so.rh-postgresql95-5 
ln -s /opt/rh/rh-postgresql95/root/usr/lib64/libpq.so.rh-postgresql95-5  /usr/lib/libpq.so.rh-postgresql95-5

这些路径用于RHEL,请使用find / -name libpq.so定位您的安装,并使用原始文件名将其添加到相同的目标文件夹/usr/lib//usr/lib64/
根本原因似乎是安装程序没有将此文件放置到共享位置。

mbjcgjjk

mbjcgjjk5#

发生此错误的原因可能是未设置$LD_LIBRARY_PATH环境变量。
当您使用前缀(./configure --prefix=/some/path)从源代码安装应用程序时,您必须通知您的lib/路径在哪里。我刚刚找到了一个solution for this,并将此变量添加到postgres用户init bash脚本中:

printf 'export PATH=$PATH:/opt/apl/pgsql/bin\nexport LD_LIBRARY_PATH=/opt/apl/pgsql/lib:$LD_LIBRARY_PATH\n' > /etc/profile.d/postgres.sh
jvlzgdj9

jvlzgdj96#

redhat 7在安装yum install pgadmin4后缺少几个步骤:

sudo ln -s /usr/lib64/pgdg-libpq5/lib/libpq.so /usr/lib64/libpq.so.5
sudo ln -s /usr/lib64/pgdg-libpq5/lib/libpq.so /usr/lib/libpq.so.5
sudo chown -R apache:apache  /var/lib/pgadmin4/

你就可以跑了

sudo python3 /usr/lib/python3.6/site-packages/pgadmin4-web/setup.py

并且如果全部成功:

systemctl start httpd
systemctl status httpd
apachectl configtest

并确保httpd启动正常

cvxl0en2

cvxl0en27#

当从存储故障中恢复时,我在pg 12重新安装时遇到了完全相同的问题。我通过安装postgressql共享库修复了它

yum  install postgresql12-libs
yi0zb3m4

yi0zb3m48#

我在安装PG9.6时遇到了同样的问题,我是这样修复的,安装程序没有考虑到这一点,这让我很恼火。

***********post yum install & running initdb *********
Success. You can now start the database server using:

    /opt/rh/rh-postgresql96/root/usr/bin/pg_ctl -D /var/opt/rh/rh-postgresql96/lib/pgsql/data -l logfile start

-bash-4.2$ /opt/rh/rh-postgresql96/root/usr/bin/pg_ctl -D /var/opt/rh/rh-postgresql96/lib/pgsql/data -l logfile start
/opt/rh/rh-postgresql96/root/usr/bin/pg_ctl: **error while loading shared libraries: libpq.so.rh-postgresql96-5: cannot open shared object file: No such file or directory**

-bash-4.2$ id
uid=26(postgres) gid=26(postgres) groups=26(postgres) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

**************
-bash-4.2$ cat LibFix
ln -s /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.rh-postgresql96-5  /usr/lib64/libpq.so.rh-postgresql96-5
ln -s /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.rh-postgresql96-5  /usr/lib/libpq.so.rh-postgresql96-5
**************

[root@****lab ~]# ln -s /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.rh-postgresql96-5  /usr/lib64/libpq.so.rh-postgresql96-5
[root@****lab ~]# ln -s /opt/rh/rh-postgresql96/root/usr/lib64/libpq.so.rh-postgresql96-5  /usr/lib/libpq.so.rh-postgresql96-5

[root@****lab ~]# su - postgres
Last login: Thu Apr  5 08:57:21 CEST 2018 on pts/0

-bash-4.2$ /opt/rh/rh-postgresql96/root/usr/bin/pg_ctl -D /var/opt/rh/rh-postgresql96/lib/pgsql/data -l logfile start
server starting

-bash-4.2$ ps -ef | grep postgres
root     12778  7883  0 09:07 pts/0    00:00:00 su - postgres
postgres 12779 12778  0 09:07 pts/0    00:00:00 -bash
postgres 12802     1  0 09:08 pts/0    00:00:00 /opt/rh/rh-postgresql96/root/usr/bin/postgres -D /var/opt/rh/rh-postgresql96/lib/pgsql/data
postgres 12803 12802  0 09:08 ?        00:00:00 postgres: logger process
postgres 12805 12802  0 09:08 ?        00:00:00 postgres: checkpointer process
postgres 12806 12802  0 09:08 ?        00:00:00 postgres: writer process
postgres 12807 12802  0 09:08 ?        00:00:00 postgres: wal writer process
postgres 12808 12802  0 09:08 ?        00:00:00 postgres: autovacuum launcher process
postgres 12809 12802  0 09:08 ?        00:00:00 postgres: stats collector process
postgres 12810 12779  0 09:08 pts/0    00:00:00 ps -ef

-bash-4.2$ id
uid=26(postgres) gid=26(postgres) groups=26(postgres) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
-bash-4.2$ psql
psql (9.6.5)

postgres=# \conninfo

You are connected to database "postgres" as user "postgres" via socket in "/var/run/postgresql" at port "5432".

相关问题