Почему psql не может подключиться к серверу?
Я набрал psql
, и я получаю следующее:
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
Я использовал sudo netstat -nlp | grep 5432
, чтобы увидеть статус, но ничего не показал.
И я искал в Интернете, кто-то сказал мне изменить pg_hba.conf
, но я не могу locate
этот файл. И я также пробовал эту команду sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432
. Он не может работать.
Ответы
Ответ 1
Ошибка указывает, что утилита psql не может найти сокет для подключения к серверу базы данных. Либо у вас нет службы базы данных, работающей в фоновом режиме, либо сокет находится где-то в другом месте, или, возможно, необходимо установить pg_hba.conf
.
Шаг 1. Убедитесь, что база данных запущена
Команда может отличаться в зависимости от вашей операционной системы. Но в большинстве систем * ix будет работать следующее: он будет искать postgres среди всех запущенных процессов
ps -ef | grep postgres
В моей системе, mac osx, это выплевывает
501 408 1 0 2Jul15 ?? 0:21.63 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log
В последнем столбце показана команда, используемая для запуска сервера, и параметры.
Вы можете просмотреть все параметры, доступные для запуска сервера postgres, используя следующие.
man postgres
Оттуда вы увидите, что параметры -D
и -r
являются соответственно datadir
и logfilename
.
Шаг 2: Если служба postgres работает
Используйте find
для поиска местоположения сокета, который должен находиться где-то в /tmp
sudo find /tmp/ -name .s.PGSQL.5432
Если postgres запущен и принимает соединения сокетов, вышеоказанное должно указать местоположение гнезда. На моей машине это оказалось:
/tmp/.s.PGSQL.5432
Затем попробуйте подключиться через psql, используя это расположение файла явно, например.
psql -h /tmp/ dbname
Шаг 3: Если служба запущена, но вы не видите сокет
Если вы не можете найти сокет, но увидите, что служба запущена, убедитесь, что файл pg_hba.conf разрешает локальные сокеты.
Перейдите к datadir
, и вы должны найти файл pg_hba.conf
.
По умолчанию в нижней части файла вы увидите следующие строки:
# "local" is for Unix domain socket connections only
local all all trust
Если вы его не видите, вы можете изменить файл и перезапустить службу postgres.
Ответ 2
Если при запуске службы postgres нет ошибок, выполните следующие действия.
Шаг 1: Запуск pg_lsclusters
выведет список всех кластеров postgres, работающих на вашем устройстве
например:
Ver Cluster Port Status Owner Data directory Log file
9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
Скорее всего, статус будет ниже в вашем случае и сервис Postgres
Шаг 2: перезапустите pg_ctlcluster
#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start
#restart postgres
sudo service postgres restart
Шаг 3: Шаг 2 не удался и выдал ошибку
Если этот процесс не будет успешным, он выдаст ошибку. Моя ошибка была (Вы можете увидеть журнал ошибок в /var/log/postgresql/postgresql-9.6-main.log
)
FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding 'postgres' user to the group 'ssl-cert'
Шаг 4: проверьте право собственности на postgres
Убедитесь, что postgres
является владельцем /var/lib/postgresql/version_no/main
например: sudo chown postgres -R/var/lib/postgresql/9.6/main/
Шаг 5: Проверьте, что пользователь postgres принадлежит к группе пользователей ssl-cert
Это случилось со мной и оказалось, что я ошибочно удалил пользователя Postgres из группы "ssl-cert". Запустите приведенный ниже код, чтобы исправить проблему с группой пользователей и исправить разрешения.
#set user to group back with
sudo gpasswd -a postgres ssl-cert
# Fixed ownership and mode
sudo chown root:ssl-cert /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key
# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgres restart
Ответ 3
Я сталкивался с подобной проблемой пару раз. Обычно я просто делаю новую установку PostgreSQL, следуя этому руководству, и это решает проблему за счет потери данных.
Я был полон решимости получить настоящее решение сегодня. Перезапуск PostgreSQL разрешил это в Ubuntu. sudo/etc/init.d/postgresql restart
Ответ 4
Решил! Хотя я не знаю, что произошло, но я просто удалил все вещи и переустановил его. Это команда, которую я использовал для ее удаления sudo apt-get --purge remove postgresql\*
и dpkg -l | grep postgres
. Последний должен найти все пакеты в случае, если он не чист.
Ответ 5
Я столкнулся с той же проблемой и
sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
sudo systemctl start postgresql
sudo systemctl status postgresql
Это сработало для меня.
Ответ 6
Ошибка означает, что сервер Postgres не работает. Попробуйте запустить это:
sudo systemctl start postgresql
Убедитесь, что сервер запускается при загрузке:
sudo systemctl enable postgresql
Ответ 7
У меня была такая же проблема на Devuan ascii (может быть, Debian тоже?). Файл конфигурации /etc/postgresql/9.6/main/postgresql.conf
содержит директиву unix_socket_directories
которая по умолчанию указывает на /var/run/postgresql
. Сменив его на /tmp
, куда большинство клиентов смотрят по умолчанию, я исправил это.
Ответ 8
Просто сделайте небольшое дополнение: если ваш экземпляр жалуется на сокет, вы также можете проверить unix_socket_directories
на /data/postgresql.conf
файле, который мог бы быть установлен на /tmp
, например, если вы использовали Распространение третьей стороны. Вы можете изменить его на /var/run/postgresql
и перезапустить службу. Для этого также может потребоваться создание dir postgresql
в /var/run
и subsys/postgresql-9.6
в /var/lock
, если они еще не существуют (работал у меня с postgresql 9.6).
Ответ 9
быстрый способ на debian:
как удаленный доступ к базе данных postgres на сервере из клиента psql
Ответ 10
Моя проблема с этим сообщением об ошибке была связана с неправильными разрешениями на сертификаты ключей и pem, с которыми я манипулировал. Что мне очень помогло:
/var/log/postgresql/postgresql -9.5-main.log, где все ошибки.
Ответ 11
Итак, для меня и моих приятелей, работающих над приложением Node.js(с Postgres и Sequelize), нам пришлось
-
brew install postgresql
(у одного из нас отсутствовали сообщения postgres, один из нас не был, и все же мы получали ту же самую ошибку msg, как указано выше)
-
brew services start postgresql
**** (используйте Homebrew для запуска postgres)
-
createdb <name of database in config.json file>
-
node_modules/.bin/sequelize db:migrate
-
npm start
Ответ 12
Во время новой установки postgresql. По умолчанию имя пользователя и пароль назначаются как "postgres". Особенностью, которую предоставляет RDBMS, является добавление роли для нового пользователя и создание базы данных. Если вы получаете такие ошибки:
-
введите имя пользователя по умолчанию:
root @kalilinux: ~ # sudo -i -u postgres
-
ype psql для интерактивного приглашения
postgres @kalilinux: ~ $psql
-
Чтобы выйти из приглашения, используйте
\ д
-
Чтобы создать новую роль пользователя
postgres @kalilinux: ~ $createuser --interactive
Теперь вы находитесь в интерактивной оболочке psql. Наслаждаться. Не забудьте войти в систему с вашего имени пользователя и введите psql для оболочки.
Ответ 13
Это может вызвать что угодно, например, моя проблема была вызвана ошибкой опечатки в файлах конфигурации. Некоторые люди говорят, что это вызвано файлами сертификатов, другая группа говорит, что это вызвано непревзойденными местными жителями.
Если вы не можете найти решение по вашей проблеме, удалите postgres и переустановите его. Это лучшее решение.
Ответ 14
Я решил эту проблему, проверив, что моя файловая система полностью заполнена, поэтому база данных не может запуститься
соединения на сокете домена Unix "/var/run/postgresql/.s.PGSQL.5432"?
Я пробовал серию устранения неполадок до тех пор, пока я не проверил использование моего диска и не обнаружил, что он заполнен, 100% использования,
df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot
Ответ 15
У меня такая же проблема. Кажется, что нет сокета, когда нет кластера.
Не удалось создать кластер по умолчанию во время установки, поскольку не задан языковой стандарт по умолчанию.
Ответ 16
У меня была похожая проблема, и проблема была в файле конфигурации pg_hba.conf. Ранее я внес некоторые изменения, которые приводили к ошибке сервера при попытке его запуска. Комментирование дополнительных дополнений решило проблему.
Ответ 17
Перезапуск экземпляра сработал для меня. Также, как упоминалось в другом посте psql -h, '/tmp' работал до перезапуска. Но пост перезапуска psql напрямую начал работать.
Таким образом, я думаю, что некоторые проблемы с владением файлами, которые были сброшены при перезапуске.
Ответ 18
Если ваш сервис небезопасен, это может быть причиной
vi /etc/postgresql/11/main/pg_hba.conf