Я пытаюсь выполнить 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: Узнайте путь к libpq.so.5
.
find / -name libpq.so.5
Пример вывода:
/usr/pgsql-9.4/lib/libpq.so.5
.
Если ничего не найдено, проверьте, установлены ли уже подходящие postgresql-либы для вашей версии 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: Будьте счастливы!
В каком каталоге находятся эти файлы libpq
? Вы можете попробовать установить переменную окружения LD_LIBRARY_PATH
для указания на эту директорию или убедиться, что она находится в стандартном месте.
Также, почему ссылка libpq.so.5
не отображается в разделе "как показано ниже"? Может быть, вам следует просто запустить ldconfig
?
Я получал такое же сообщение об ошибке на 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/
, используя оригинальное имя файла.
Основная причина заключается в том, что при установке этот файл не был помещен в общее место.
Эта ошибка, вероятно, возникает из-за того, что переменная среды $ 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
У меня была точно такая же проблема с установкой 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".