Почему 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:

  • изменить /etc/postgresql/10/main/postgresql.conf с помощью listen_address *
  • отредактируйте /etc/postgresql/10/main/pg_hba.conf и добавьте строку в конце с помощью host all all 0/0 md5
  • создать роль для входа postgres=# CREATE ROLE remoteuser LOGIN WITH PASSWORD 'foo'
  • sudo /etc/init.d/postgresql restart изменения вступят в силу

  • войдите с clientide с помощью psql --host=ipofserver --port=5432 --username=remoteuser --password --dbname=mydb

  • пароль обращается в интерактивном режиме, который в этом случае является foo

как удаленный доступ к базе данных 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