加载共享库时出错:libpq.so.5:无法打开共享对象文件:没有这样的文件或目录

时间:2012-10-08 12:16:02

标签: postgresql debian

我正在尝试在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

我做错了什么?

6 个答案:

答案 0 :(得分:19)

试试这个:

1:了解libpq.so.5

的路径
find / -name libpq.so.5

输出示例: /usr/pgsql-9.4/lib/libpq.so.5 如果一无所获,请检查您是否已经为postgresql版本和操作系统平台安装了合适的postgresql-libs

2:#34;众所周知的"中的库的符号链接库路径如/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:快乐!

答案 1 :(得分:7)

这些libpq文件位于哪个目录中?您可以尝试将环境变量LD_LIBRARY_PATH设置为指向此目录,或确保它位于标准位置。

另外,为什么“{1}}链接显示在”如下所示“部分中?也许你应该运行libpq.so.5

答案 2 :(得分:5)

我在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/

根本原因显示安装未将此文件放入共享位置。

答案 3 :(得分:1)

可能由于未设置$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

答案 4 :(得分:1)

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可以正常启动

答案 5 :(得分:-1)

我在pg 9.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".