Ошибка при загрузке разделяемых библиотек: 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".