Ошибка PostgreSQL «Не удалось подключиться к серверу: нет такого файла или каталога»

134

Как и некоторые другие, я получаю эту ошибку, когда запускаю rake db: переношу в свой проект или даже пытаюсь выполнить большинство задач базы данных для Ruby on Rails 3.2 приложения.

PGError (не удалось подключиться к серверу: нет такого файла или каталога. сервер, работающий локально, и прием соединений в сокетном домене Unix "/tmp/.s.PGSQL.5432"?

Я установил PostgreSQL с Homebrew давным-давно и после попытки установки MongoDB моя установка PostgreSQL никогда не была такой же. Я запускаю OS X v10.6 Snow Leopard.

Что не так и как лучше понять, как PostgreSQL и должен быть настроен на моем Mac?

До сих пор (я думаю) это говорит мне, что PostgreSQL не работает (?).

ps -aef|grep postgres                                                                                                   (ruby-1.9.2-p320@jct-ana) (develop) ✗
  501 17604 11329   0   0:00.00 ttys001    0:00.00 grep postgres

Но это говорит мне, что PostgreSQL работает?

✪ launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist                                                        (ruby-1.9.2-p136) 
homebrew.mxcl.postgresql: Already loaded

Как это исправить? что я не вижу?

PS: ~/Library/LaunchAgents содержит два файла .plist PostgreSQL. Я не уверен, что это важно.

org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist

Я попробовал следующее и получил результат, как показано ниже.

$psql -p 5432 -h localhost

psql: could not connect to server: Connection refused
    Is the server running on host "localhost" (127.0.0.1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (::1) and accepting
    TCP/IP connections on port 5432?
could not connect to server: Connection refused
    Is the server running on host "localhost" (fe80::1) and accepting
    TCP/IP connections on port 5432?

Я читал, так как это происходит потому, что OS X устанавливает собственную версию PostgreSQL, а Homebrew устанавливает другую версию в другом месте, а команды PostgreSQL ищут в каталоге /tmp/. Вам нужно будет искать больше в Stack Overflow, но в основном вы symlink PostgreSQL, так что все, что ищет в этом пути tmp, действительно находит реальный путь, если это имеет смысл.

Это ссылка, в которой я нашел еще несколько вещей, чтобы попробовать, в частности, делать символическую ссылку в соответствии с выше, Mac OSX Lion Postgres не принимает подключения на /tmp/.s. PGSQL.5432. Я все еще хочу, чтобы кто-то собрал достойное объяснение концепций установки PostgreSQL на OS X и почему все это так сложно.

Последние сведения, помогающие устранить неполадки:

$ which psql // This tells you which PostgreSQL you are using when you run $ psql. 

Затем запустите:

$ echo $PATH

Ключевое значение, которое необходимо учитывать, следующее:

Убедитесь, что запись пути для копии PostgreSQL, которую вы хотите запустить COMES, до пути к OS X-системе PostgreSQL.

Это основное требование, которое решает, какой PostgreSQL запускается, и это то, что мне говорят, приводит к большинству этих проблем.

  • 0
    Вы когда-нибудь находили решение для этого? Я вижу, вы не отметили один. Ничто из этого мне тоже не поможет.
  • 0
    Это все еще в основном vodoo и странные воплощения, чтобы заставить это работать. Я только что добавил [Edit 2] выше со ссылкой с некоторыми дополнительными предложениями и как сделать символическую ссылку согласно моим комментариям редактирования. В конце концов, Symlink сработал для меня, но я думаю, что я также удалял и переустанавливал postgres и homebrew, так что трудно точно понять, в чем разница. Удачи. Сообщите, если вы обнаружите что-то новое, с 15 000 просмотров по этому вопросу, это то, что причиняет боль многим людям!
Показать ещё 2 комментария
Теги:
homebrew
osx-snow-leopard

19 ответов

93

Проверьте, нет ли postmaster.pid в вашем каталоге postgres, возможно /usr/local/var/postgres/

удалите это и запустите сервер.

Check - https://github.com/mperham/lunchy - отличная оболочка для launchctll.

  • 2
    Это сработало для меня. Я только что установил свежий yosemite и загрузил postgres из доморощенного. Работал нормально, когда я впервые использовал его, но после перезапуска возникла эта проблема. Итак, вы можете объяснить, почему это сработало?
  • 1
    работал для меня, но для новичков, кто-то может объяснить, почему и насколько это безопасно
54

ОБНОВЛЕНИЕ: ЗДЕСЬ ЛУЧШЕ ФИКСИРОВАТЬ, ЕСЛИ ВЫ НА OSX...

http://postgresapp.com/


Старый ответ:

Вот исправление, больше информации здесь:

https://github.com/mxcl/homebrew/issues/5004

Сначала остановите db, затем

  • cd/var
  • rm -r pgsql_socket
  • ln -s/tmp pgsql_socket
  • chown _postgres: _postgres pgsql_socket
  • перезапустить postgres (не ваш компьютер)
  • 2
    Вернулись ошибки для меня, и это исправление не помогло. Я чувствую, что я наткнулся в темной комнате на работу, чтобы понять, что на самом деле происходит, и сам процесс исправления. Можно ли объяснить, как я мог диагностировать и устранить эту проблему?
  • 0
    Работал на меня! Спасибо!
Показать ещё 7 комментариев
47

Для меня это работает

rm /usr/local/var/postgres/postmaster.pid
  • 9
    В моем случае после удаления pid мне нужно было перезапустить postgresql с помощью pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
  • 4
    Мне также пришлось перезапустить postgres, при установке homebrew вы можете сделать это следующим образом: brew services restart postgresql
Показать ещё 1 комментарий
14

Для вышеупомянутой ошибки вы упомянули, это работает для меня..

1) возможно изменить свой порт по умолчанию, не указанный в файле postgres.conf, если вы упомянули другой, то по умолчанию порт 5432 при установке.

(ИЛИ)

2) Измените порт no в файле postgresql.conf и перезапустите сервер БД

(ИЛИ)

3) вместо полной команды psql типа

"psql -p 5432 -h localhost"

  • имя сервера и порт
  • 0
    1. Я думаю, что моя установка была бы по умолчанию.
  • 0
    2. Я мог бы изменить это, какие-либо последствия изменения порта?
Показать ещё 3 комментария
10

Если вы используете Homebrew, удалите Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Загрузите и запустите следующий script, чтобы установить разрешение на /usr/local: * https://gist.github.com/rpavlik/768518

$ ruby fix_homebrew.rb

Затем установите Postgres снова и pg gem: *

$ brew install postgresql  
$ initdb /usr/local/var/postgres -E utf8

Чтобы запустить startgresql при запуске входа в систему:

$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents 

Или запустите вручную.

Установить pg gem

$ gem install pg

Я надеюсь, что помог

  • 0
    Из brew info postgres : ARCHFLAGS="-arch x86_64" gem install pg
  • 0
    не удалит ли это записи в БД?
Показать ещё 1 комментарий
8

У меня была эта проблема, когда я обновил Postgres до 9.3.x. Быстрое исправление для меня состояло в том, чтобы перейти к той версии 9.2.x, с которой я раньше (нет необходимости устанавливать новую).

$ ls /usr/local/Cellar/postgresql/
9.2.4
9.3.2
$ brew switch postgresql 9.2.4
$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
<open a new Terminal tab or window to reload>
$ psql

Этот ответ предлагает гораздо более полное объяснение, а также альтернативные способы устранения проблемы.

  • 0
    Спасибо за вклад и четкие инструкции, чтобы повторить ваше исправление. Эта ссылка, которую вы включили, безусловно, является исчерпывающей, в настоящее время у меня нет проблем с postgres, поэтому я не уверен, насколько это пока полезно для других, но для всех остальных, если вы найдете это полезным, пожалуйста, прокомментируйте здесь.
  • 0
    Я считаю это полезным и актуальным, хотя, может быть, не напрямую. Он решил проблему, просто переключая версии, используя brew, который является довольно распространенным инструментом, и просто повторил шаги, но пока, замечательно, ссылка попадает в большее количество проблем, характерных для brew, поэтому я вижу, что вы сомневаетесь в ее ценности. в контексте вопроса ОП.
5

Итак, для многих проблем здесь кажется, что люди уже запускали psql и должны были удалить postmaster.pid. Тем не менее, у меня не было этой проблемы, так как у меня даже не было установленных postgres в моей системе.

Здесь решение, которое работало для меня в MAC OSX Yosemite

  • Я пошел в http://postgresapp.com/ и загрузил приложение.
  • Я переместил приложение в папку Application/
  • Я добавил его в $PATH, добавив его в .bashrc или .bash_profile или .zshrc: export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  • Я запускал postgres из каталога Applications и снова запускал команду, и она работала.

Надеюсь, это поможет! Toodles!

Кроме того, этот ответ помог мне больше всего: https://stackoverflow.com/questions/13573204/psql-could-not-connect-to-server-no-such-file-or-directory-mac-os-x

  • 0
    Разве это не указывает на приложение Postgres, а не на установку brew? Это может отрезать вас от некоторых полезных пакетов (например, pgrouting, которые вы не можете установить для приложения Postgres, которое вызвало у меня бесконечное горе, и вот я здесь)
4

При запуске: psql -p 5432 -h localhost он не использует драйвер loopback, но использует настоящий сокет, и поэтому вам нужно настроить postgres для приема соединений сокетов. Следовательно, хотя pgadmin и другие клиенты могут работать, psql не будет.

Вам нужно изменить файл postgresql.conf и файлы pg_hba.conf, чтобы разрешить соединение через настоящий сокет. Это также позволит подключиться к удаленному ip, поэтому по умолчанию он отключен.

Эти файлы находятся в каталоге данных, но фактическое местоположение может быть различным в зависимости от того, как были установлены postgres. При запуске postgres запустите команду:

ps -ef | grep postmaster

Эти два файла - это каталог -D (возможно,/usr/local/pgsql/data).

Для файла postgresql.conf раскомментируйте файл listen_address и измените его как:

listen_address = '*'

Для pg_hba.conf добавьте строку:

host all all 0.0.0.0/0 md5
2

Я не знаю Mac или Homebrew, но я хорошо знаю PostgreSQL.

Вы хотите выяснить, откуда идут журналы из PostgreSQL, и что каталог сокетов для PostgreSQL. По умолчанию при создании PG каталог сокетов -/tmp/. Если вы не изменили это, когда вы создали PG, а затем вы начали PG, вы должны увидеть файл сокета в /tmp, если вы это сделаете: ls -al/tmp

Файл сокета начинается с ".", поэтому вы не увидите его с помощью "-a" на ls.

Если вы не видите там сокет, и вы ничего не видите от ps awux | grep postgres, то PG, вероятно, не работает, или, может быть, и есть OSX-установленный. Что может случиться, так это то, что вы можете столкнуться с конфликтом при прослушивании на порту 5432 на localhost-use netstat -anp, чтобы узнать, что, если угодно, прослушивает 5432. Если Mac OSX PG уже прослушивает этот порт, это может быть проблемой.

Надеюсь, что это поможет. Я слышал, что доморощенный может сделать вещи немного уродливыми и много людей, которых я говорил, чтобы поощрять использование виртуальной машины вместо этого.

  • 0
    Спасибо за участие в этом. Если это поможет вам получить больше информации, homebrew просто запускает этот скрипт при установке postgres. github.com/Homebrew/homebrew-core/blob/master/Formula/… Я надеюсь, что вы могли бы взглянуть на него и, возможно, поделиться дальнейшими знаниями о том, что вы найдете. Я думаю, что люди нуждаются в более простом способе отладки, почему они получают эту ошибку, чтобы они знали, какое действие предпринять.
  • 0
    Исходя из того, что я могу понять из этого сценария, в каталоге «var», возможно, находится HOMEBREW_PREFIX, находится файл «postgres.log». Этот файл журнала будет содержать информацию о попытке PG запустить (в том числе, если по какой-то причине он не запустился). Вот пример сообщения, показывающего, что PG не запускается из-за другого процесса, прослушивающего порт 5432:
Показать ещё 4 комментария
1

Я исправил это, обновив postgres.

brew update
brew upgrade

Затем мне также пришлось обновить базы данных, чтобы они были совместимы с новой основной версией, потому что я обновил с 10 до 11.

brew postgresql-upgrade-database

(источник https://github.com/facebook/react-native/issues/18760#issuecomment-410533581)

1

для чего это стоит, я испытал ту же ошибку, когда у меня была опечатка (md4 вместо md5) в моем pg_hba.conf файле (/etc/postgresql/9.5/main/pg_hba.conf)

Если вы пришли сюда, как я, дважды проверьте этот файл, чтобы убедиться, что там нет ничего смешного.

  • 0
    где находится файл pg_hba.conf ?
  • 1
    /etc/postgresql/{postgres_version}/main/pg_hba.conf
1

У меня был PostgreSQL 9.3 и получил ту же ошибку,

Не удалось подключиться к серверу: соединение отклонено. Сервер работает. на хосте "localhost" (127.0.0.1) и принимать соединения TCP/IP на порт 5432?

Я исправил это, используя:

chmod 777  /var/lib/pgsql/9.3/data/pg_hba.conf 
service postgresql-9.3 restart

Это работает для меня.

  • 0
    Этот файл не существует для меня
1

Привет, мир:)
Лучшим, но странным для меня способом было сделать следующее.

1) Загрузите postgres93.app или другую версию. Добавьте это приложение в папку /Applications/.

2) Добавьте строку (команду) в файл .bash_profile (который находится в моем домашнем каталоге):

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
Это значение PATH для psql из Postgres93.app. Строка (команда) запускается каждый раз при запуске консоли.

3) Запустите папку Postgres93.app из /Applications/. Он запускает локальный сервер (порт "5432", а хост - "localhost" ).

4) После всех этих манипуляций я был рад запустить $ createuser -SRDP user_name и другие команды и убедиться, что он сработает! Postgres93.app можно запускать при каждом запуске системы.

5) Также, если вы хотите графически увидеть свои базы данных, вы должны установить PG Commander.app. Это хороший способ увидеть вашу базу данных postgres как симпатичные таблицы данных.

Конечно, это полезно только для локального сервера. Я буду рад, если эта инструкция поможет другим, кто столкнулся с этой проблемой.

1

Причина

Lion поставляется с уже установленной версией postgres и по умолчанию использует эти двоичные файлы. В общем, вы можете обойти это, используя полный путь к двоичным файлам postgres homebrew, но могут быть проблемы с другими программами.

Решение

curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | ш

Через

http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/

0

Если вы находитесь на MacOS и используете доморощенный, я нашел этот ответ чрезвычайно полезным:

https://stackoverflow.com/questions/27700596/homebrew-postgres-broken

Для меня мой сервер работал, но из-за обновления у меня возникли проблемы с подключением (обратите внимание: я пользуюсь услугами brew). Если Postgres запущен, попробуйте cat /usr/local/var/postgres/server.log и посмотрите, что говорят журналы. Моя ошибка была миграцией, а не проблемой подключения.

Также после ручной миграции, которую они предлагают (что работает, но), я обнаружил, что для моего пользователя больше нет таблицы. Попробуйте эту команду, чтобы исправить это: createdb (ответил через psql: FATAL: database "<user> " не существует)

0

Одна из причин может заключаться в том, что

unix_socket_directories в файле postgresql.conf не указан в каталоге, который он ищет.

В примере вопроса он ищет каталог /tmp, который должен быть указан в файле postgresql.conf.

что-то вроде этого:

unix_socket_directories = '/var/run/postgresql,/tmp'    # comma-separated list of directories

Это решение сработало для меня.

0

При запуске PostgreSQL могут возникать различные проблемы. Я бы рекомендовал очистить все версии postgres и начать новый. После того, как вы его установили, очень легко воссоздать свою базу данных, если у вас есть проект рельсов с обновленным db/schema.rb

Вот как обычно установить PostgreSQL на Mac. Если вы используете локальную базу данных под локальным пользователем root, вы можете опустить последний шаг, создающий пользователя todo

0

Одна из причин, по которой вы получаете эту ошибку, заключается в том, что ваша локальная база данных postgres отключается при перезагрузке компьютера. В новом окне терминала просто введите:

$psql -h localhost 

чтобы перезагрузить сервер.

-5

Это очень просто. Добавляйте хост в свой файл database.yaml.

  • 0
    host: 127.0.0.1 или host: localhost, например.
  • 0
    Каждый любит простое решение. Но как это работает? Как я уже говорил в моих комментариях выше, поиск этого привел меня ко многим сложным маршрутам. Можете ли вы уточнить и рассказать нам немного больше о том, что вы видите на самом деле, и как это простое изменение решает проблему. Спасибо за помощь в этом! :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню