36

我正在尝试pg_dump在 Debian 上运行的 PostgreSQL 9.0.4 服务器上执行,但出现以下错误:

./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

我做错了什么?

4

6 回答 6

37

尝试这个:

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:开心!

于 2015-03-12T13:48:01.343 回答
11

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

另外,为什么libpq.so.5“如下所示”部分中没有显示链接?也许你应该跑ldconfig

于 2012-10-08T12:18:39.537 回答
9

我在 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/使用原始文件名。

根本原因似乎是安装没有将此文件放入共享位置。

于 2016-10-23T07:00:01.223 回答
2

$LD_LIBRARY_PATH由于未设置环境变量,可能会发生此错误。

当您使用前缀 ( ) 从源代码安装应用程序时./configure --prefix=/some/path,您必须告知您的lib/路径在哪里。我刚刚找到了一个解决方案,并将这个变量添加到 postgres 用户初始化 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
于 2019-09-20T21:10:24.757 回答
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 启动正常

于 2020-05-11T14:34:56.677 回答
-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".
于 2018-04-05T07:35:28.783 回答