Postgres не удалось подключиться к серверу

После обновления brew и обновления brew мои postgres получили некоторую проблему. Я попытался удалить postgres и установить снова, но это не сработало.

Это сообщение об ошибке. (Я также получил это сообщение об ошибке, когда я пытаюсь выполнить rake db: migrate)

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Как я могу его решить?

Версия для Mac: Горный лев.

homebrew версия: 0.9.3

версия postgres: psql (PostgreSQL) 9.2.1

И это то, что я сделал.

12:30 ~/D/works$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.2.1...
12:31 ~/D/works$ brew uninstall postgresql
Uninstalling /usr/local/Cellar/postgresql/9.1.4...
12:31 ~/D/works$ psql --version
bash: /usr/local/bin/psql: No such file or directory
12:33 ~/D/works$ brew install postgresql
==> Downloading http://ftp.postgresql.org/pub/source/v9.2.1/postgresql-9.2.1.tar.bz2
Already downloaded: /Library/Caches/Homebrew/postgresql-9.2.1.tar.bz2
......
......
==> Summary
/usr/local/Cellar/postgresql/9.2.1: 2814 files, 38M, built in 2.7 minutes
12:37 ~/D/works$ initdb /usr/local/var/postgres -E utf8
The files belonging to this database system will be owned by user "laigary".
This user must also own the server process.

The database cluster will be initialized with locale "en_US.UTF-8".
The default text search configuration will be set to "english".

initdb: directory "/usr/local/var/postgres" exists but is not empty
If you want to create a new database system, either remove or empty
the directory "/usr/local/var/postgres" or run initdb
with an argument other than "/usr/local/var/postgres".
12:39 ~/D/works$ mkdir -p ~/Library/LaunchAgents
12:39 ~/D/works$   cp /usr/local/Cellar/postgresql/9.2.1/homebrew.mxcl.postgresql.plist ~/Library/LaunchAgents/
12:39 ~/D/works$   launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
homebrew.mxcl.postgresql: Already loaded
12:39 ~/D/works$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
server starting
12:39 ~/D/works$ env ARCHFLAGS="-arch x86_64" gem install pg
Building native extensions.  This could take a while...
Successfully installed pg-0.14.1
1 gem installed
12:42 ~/D/works$ psql --version
psql (PostgreSQL) 9.2.1
12:42 ~/D/works$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5432"?

Теперь, после того, как я переустановил howbrew, когда я использую $ psql, в нем не появляется сообщение об ошибке.

Но я запускаю rake db:migrate в моем приложении rails, он показывает:

could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `initialize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `new'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:1213:in `connect'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:329:in `initialize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `new'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/postgresql_adapter.rb:28:in `postgresql_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:309:in `new_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:319:in `checkout_new_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:241:in `block (2 levels) in checkout'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in `loop'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:236:in `block in checkout'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:233:in `checkout'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:96:in `block in connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_pool.rb:404:in `retrieve_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:170:in `retrieve_connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/connection_adapters/abstract/connection_specification.rb:144:in `connection'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:107:in `rescue in create_database'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:51:in `create_database'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `block (3 levels) in <top (required)>'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `each'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/gems/1.9.1/gems/activerecord-3.2.8/lib/active_record/railties/databases.rake:40:in `block (2 levels) in <top (required)>'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:205:in `call'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:205:in `block in execute'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:200:in `each'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:200:in `execute'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:158:in `block in invoke_with_call_chain'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/monitor.rb:211:in `mon_synchronize'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:151:in `invoke_with_call_chain'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/task.rb:144:in `invoke'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:116:in `invoke_task'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `block (2 levels) in top_level'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `each'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:94:in `block in top_level'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:88:in `top_level'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:66:in `block in run'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:133:in `standard_exception_handling'
/usr/local/Cellar/ruby/1.9.3-p327/lib/ruby/1.9.1/rake/application.rb:63:in `run'
/usr/local/bin/rake:32:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"riy_development", "pool"=>5, "username"=>nil, "password"=>nil}

Наконец, я нахожу решение.

$ sudo mkdir /var/pgsql_socket/
$ sudo ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/

Это решение немного сложно, но оно работает. Надеюсь, что у кого-то есть лучшее решение.

Обновление

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

rm /usr/local/var/postgres/postmaster.pid

Ответы

Ответ 1

Была аналогичная проблема; файл pid блокировал postgres от запуска. Чтобы исправить это:

rm /usr/local/var/postgres/postmaster.pid

а затем все хорошо.

Ответ 2

Иногда это может быть проблемой при обновлении postgres.

В моем случае это произошло при обновлении с 9.3 до 9.4.

См. http://www.postgresql.org/docs/9.4/static/upgrading.html

OS X/Homebrew:

Попробуйте запустить postgres -D /usr/local/var/postgres - он даст вам гораздо более подробный вывод, если postgres не запускается.

В моем случае запуск rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8 удалил мои старые базы данных и затем повторно инициализировал схему dg postgres.

Благодаря https://github.com/Homebrew/homebrew/issues/35240 для этого решения.

После восстановления моих баз данных (с помощью rake db:create) все снова работало нормально.

Ответ 4

Если установка и удаление postgres с помощью brew не подходит для вас, посмотрите журналы вашей установки postgresql или:

postgres -D /usr/local/var/postgres

если вы видите такой вывод:

LOG:  skipping missing configuration file "/usr/local/var/postgres/postgresql.auto.conf"
FATAL:  database files are incompatible with server
DETAIL:  The data directory was initialized by PostgreSQL version 9.4, which is not compatible with this version 9.6.1.

Затем попробуйте следующее:

rm -rf /usr/local/var/postgres && initdb /usr/local/var/postgres -E utf8

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

pg_ctl -D /usr/local/var/postgres -l logfile start

Источник

Ответ 5

В Yosemite, если файл pid блокирует запуск Postgres, и у вас есть демон launchctl, пытающийся (и неспособный) загрузить демоны базы данных, вам нужно будет выгрузить файл plist:

$ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Затем удалите файл pid

$ rm /usr/local/var/postgres/postmaster.pid

Затем перезагрузите демон launchctl

$ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Ответ 6

Для тех, кто читает это и использует Postgres.app, вам может понадобиться host: localhost в вашей базе данных .yml. http://postgresapp.com/documentation#toc_3

Ответ 7

brew services start postgres 

работал у меня!

Ответ 8

Обновление базы данных работает для меня

brew postgresql-upgrade-database

Ответ 9

Убедитесь, что файл сокета существует.

$ ls -l /tmp/.s.PGSQL.5432
srwxrwxrwx  1 you  wheel  0 Nov 16 09:22 /tmp/.s.PGSQL.5432

Если это не так, проверьте ваш postgresql.conf для изменения unix_socket_directory.

$ grep unix_socket /usr/local/var/postgres/postgresql.conf
#unix_socket_directory = ''     # (change requires restart)
#unix_socket_group = ''         # (change requires restart)
#unix_socket_permissions = 0777     # begin with 0 to use octal notation

Ответ 10

Проблема также может быть связана с аварийным процессом, который оставил файл postmaster.pid. Я делаю это и работаю:

$ brew services stop postgresql
$ rm /usr/local/var/postgres/postmaster.pid # adjust path accordingly to your install
$ brew services start postgresql

Ответ 11

Проблема в том, что на порту 5432 уже запущена служба, и мы не можем установить соединение через сокет psql через этот порт.

Я удалил файл сокета

rm -rf /tmp/.s.PGSQL.5432/

Потом я переинициализировал сервисы postgres

postgres -D /usr/local/var/postgres

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

Ответ 12

Это случилось со мной, когда я обновился с 9.3.4 до 9.5, поскольку базы данных несовместимы без обновления.

Я использовал pg_upgrade следующим образом:

Стоп postgres

$ brew services stop postgresql

Обновление баз данных:

$ pg_upgrade \
   -d /usr/local/var/postgres \
   -D /usr/local/var/postgres9.5 \
   -b /usr/local/Cellar/postgresql/9.3.4/bin/ \
   -B /usr/local/Cellar/postgresql/9.5.0/bin/ \
   -v

Архивировать старые базы данных:

 $ mv /usr/local/var/postgres /usr/local/var/postgres9.3.save
 $ mv /usr/local/var/postgres9.5 /usr/local/var/postgres

Перезапустить postgres:

 $ brew services start postgresql

Обновленные драгоценные камни (для рельсов/активная запись):

 $ gem uninstall pg
 $ gem uninstall activerecord-postgresql-adapter
 $ bundle install

Ответ 13

Это на самом деле то, что вы должны делать:

вместо этого вы должны посмотреть на /usr/local/var/postgres/postmaster.pid

а затем посмотрите на первую строку файла - это плохой PID

Запустить

ps aux | grep <PID>

например:

ps aux | grep 12345

то do

kill <PID>

например

kill 12345

Предполагая, что он все еще работает

https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists

не слушайте принятый ответ, это плохо и испортит ваши данные.

Ответ 14

Изменение настроек postresql или database.yml, изменение $PATH или создание символических ссылок были для меня ненужными. Все, что мне нужно было сделать, это gem uninstall pg, а затем bundle (или gem install pg).

Проблема заключалась в том, что pg gem был установлен перед postgres homebrew, поэтому он собирал настройки из версии postgres, которая поставляется с MacOS. Переустановка его (и, таким образом, восстановление собственного расширения) устранила проблему.

Ответ 15

Самый надежный способ избежать этого - сделать

brew reinstall postgresql

Это сохранит ваше разрешение пользователя и т.д. все неповрежденное и все будет reset для нового. Работает все время!

Ответ 16

Опция Psql

-h имя хоста --host = имя хоста

: Указывает имя хоста машины, на которой работает сервер. Если значение начинается с косой черты, оно используется как каталог для сокета Unix-домена.

$ grep "port\|unix_socket" /etc/postgresql/9.1/main/postgresql.conf
port = 5433                                         # (change requires restart)
unix_socket_directory = '/var/run/postgresql'       # (change requires resta

$ netstat -nalp | grep postgres
unix  2      [ ACC ]     STREAM     LISTENING     106753   4349/postgres       /tmp/.s.PGSQL.5432
unix  2      [ ACC ]     STREAM     LISTENING     10377 1031/postgres       /var/run/postgresql/.s.PGSQL.5433

Запустить psql с опцией -host

$ psql -p 5433 -h /var/run/postgresql

Не нужно делать мягкую ссылку

Ответ 17

Перейдя по этой проблеме также в MacOS Sierra, и когда мы запустили pg_ctl, как описано выше, мы получили следующую ошибку pg_ctl: no database directory specified and environment variable PGDATA unset. Поэтому мы выполнили шаги здесь, которые решили нашу проблему, а именно:

mkdir ~/.postgres

initdb ~/.postgres

pg_ctl -D ~/.postgres start

Ответ 18

Если postgres был установлен с использованием homebrew, вы можете исправить это, выполнив:

brew link postgres

Ответ 20

FWIW, это случилось со мной сегодня, но случилось то, что в то время я запускал обновления Ubuntu, которые, вероятно, обновляли Postgres. После завершения обновления я смог подключиться без сучка и задоринки.

Для полноты, я пытался извлечь записи из базы данных из консоли Rails:

development (main):0 > a = MyModel.find 73694
PG::ConnectionBad: 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"?

Ответ 21

Похоже, ваш psql не запускается. Вы должны запустить его перед подключением. Вы можете сделать это, используя Postgres.app только для Mac OS. (Загрузите и установите это приложение http://postgresapp.com) Откройте приложение, и у вас есть сервер PostgreSQL, готовый и ожидающий новых соединений. Закройте приложение, и сервер выключится. Вы также можете найти эту информацию здесь http://www.postgresql.org/download/macosx/. Надеюсь, это поможет вам.

Ответ 22

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

Ответ 23

Для тех, кто использует эту команду и не работает, или файл не существует и использует Ruby on Rails

rm/usr/local/var/postgres/postmaster.pid

Или любая другая команда и просто продолжайте сбой.

Я решил эту проблему удалить с помощью Brew. Мне пришлось удалить с brew 2 раза, потому что при первом удалении останется другая версия postgresql, а вторая деинсталляция процесса будет завершена.

Установите postgresql с помощью Brew

Затем снимите, создайте и перенесите базы данных проекта

(Не забудьте запустить сервер postgresql)

Ответ 24

¿Недавно вы изменили pg_hba.conf? если вы только что отметили любую опечатку:

"local" предназначен только для соединений сокета домена Unix

local all all password

Локальные соединения IPv4:

хост все все 127.0.0.1/32 пароль

Локальные соединения IPv6:

host all all:: пароль 1/128

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

Ответ 25

Я столкнулся с этой проблемой после попытки восстановления/удаления/создания db, в то время как другие процессы обращались к ним. Исправление MacOSX/Homebrew было:

  • закрыть все другие процессы доступа rails server, rails console, guard и т.д.
  • загрузить/выгрузить с помощью команд, найденных в brew info postgres
  • запустить восстановление/удаление/создать из

Ответ 26

У меня такая же ошибка. Оказывается, postgres просто не работает (обычно он работает в фоновом режиме, но по какой-то причине он не был сегодня).

Если это так, просто введите postgres в командной строке вашего каталога проекта

Ответ 27

После огромного количества назад и вперед это действительно сменилось на версию pg gem, которую я использовал. На mavericks pg version 0.15.1 не будет подключаться к порту 5432, но версия 0.17.1 работает просто отлично - очень странно.

Ответ 28

Для меня это было обновление Apache, вызвавшее эту проблему. Я все еще могу запустить psql в консоли или вызвать db непосредственно из kdevelop. Также он работал над добавлением "host = localhost" в строку подключения.

НО реальная проблема заключалась в том, что apache изменился на private tmp.

Решение: Обновить /usr/lib/systemd/system/apache 2.service и изменить PrivateTmp = true для PrivateTmp = false.

Я работаю над ОС OpenSuse, но думаю, что что-то подобное может произойти на Mac.

Ответ 29

У меня такая же проблема, потому что я использую неправильное имя пользователя Postgres в коде. Я вошел в postgres psql -d postgres и введите \du, чтобы взять имя роли и исправить имя пользователя Postgres.

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

Надеюсь, это поможет кому-то

Ответ 30

Это происходит, когда сервер postgres не работает. Шаги, чтобы правильно установить Postgres через Homebrew на MAC:

  1. brew install postgres

  2. initdb/Users/<username>/db -E utf8 [Это инициализирует postgres для использования данного каталога в качестве каталога базы данных. Обычно не рекомендуется использовать каталог пользователя для хранения базы данных. Отредактируйте файл sudoers для добавления initdb и аналогичных команд, а затем запустите initdb в /usr/local/var/postgres]

  3. pg_ctl -D/Users/<username>/db -l logfile start [После успешного выполнения шага 2 будет предложено запустить шаг 3. Эта команда запускает сервер вручную.]