Ошибка при загрузке разделяемых библиотек: libpq.so.5: невозможно открыть файл общих объектов: нет такого файла или каталога

Я пытаюсь выполнить pg_dump на сервере PostgreSQL 9.0.4, запущенном на Debian, и я получаю ошибку ниже:

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

Что я делаю неправильно?

Ответ 1

Попробуйте следующее:

1: Знайте путь libpq.so.5

find / -name libpq.so.5

Пример вывода: /usr/pgsql-9.4/lib/libpq.so.5 Если ничего не найдено, проверьте, были ли вы уже установлены подходящие postgresql-lib для вашей версии postgresql и вашей платформы ОС

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: Будьте счастливы!

Ответ 2

В каком каталоге находятся эти файлы libpq? Вы можете попробовать установить переменную окружения LD_LIBRARY_PATH, чтобы указать на этот каталог или убедиться, что он находится в стандартном месте.

Кроме того, почему ссылка libpq.so.5 не показана в разделе "как показано ниже"? Возможно, вам нужно просто запустить ldconfig?

Ответ 3

Я получал такое же сообщение об ошибке Postgres 9.5 на RHEL 6.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/, используя оригинальное имя файла.

Основная причина показывает, что установка не помещала этот файл в общую папку.

Ответ 4

Эта ошибка, вероятно, возникает из-за того, что переменная окружения $LD_LIBRARY_PATH не установлена.

Когда вы устанавливаете свое приложение из исходного кода с использованием префикса (./configure --prefix=/some/path), вы должны сообщить, где находится ваш путь lib/. Я только что нашел решение для этого и добавил эту переменную в сценарий init bash пользователя postgres:

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

Ответ 5

У меня была точно такая же проблема с установкой 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
**************

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

[[email protected]****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".