Ответ 1
Была аналогичная проблема; файл pid блокировал postgres от запуска. Чтобы исправить это:
rm /usr/local/var/postgres/postmaster.pid
а затем все хорошо.
После обновления 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
Была аналогичная проблема; файл pid блокировал postgres от запуска. Чтобы исправить это:
rm /usr/local/var/postgres/postmaster.pid
а затем все хорошо.
Иногда это может быть проблемой при обновлении 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
) все снова работало нормально.
Нашел решение, которое работало для меня здесь:
В основном вы запускаете следующую команду для ручного запуска сервера:
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Если установка и удаление 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
В 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
Для тех, кто читает это и использует Postgres.app, вам может понадобиться host: localhost
в вашей базе данных .yml. http://postgresapp.com/documentation#toc_3
brew services start postgres
работал у меня!
Обновление базы данных работает для меня
brew postgresql-upgrade-database
Убедитесь, что файл сокета существует.
$ 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
Проблема также может быть связана с аварийным процессом, который оставил файл postmaster.pid. Я делаю это и работаю:
$ brew services stop postgresql
$ rm /usr/local/var/postgres/postmaster.pid # adjust path accordingly to your install
$ brew services start postgresql
Проблема в том, что на порту 5432 уже запущена служба, и мы не можем установить соединение через сокет psql через этот порт.
Я удалил файл сокета
rm -rf /tmp/.s.PGSQL.5432/
Потом я переинициализировал сервисы postgres
postgres -D /usr/local/var/postgres
Это сработало для меня.
Это случилось со мной, когда я обновился с 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
Это на самом деле то, что вы должны делать:
вместо этого вы должны посмотреть на /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
не слушайте принятый ответ, это плохо и испортит ваши данные.
Изменение настроек postresql или database.yml, изменение $PATH или создание символических ссылок были для меня ненужными. Все, что мне нужно было сделать, это gem uninstall pg
, а затем bundle
(или gem install pg
).
Проблема заключалась в том, что pg gem был установлен перед postgres homebrew, поэтому он собирал настройки из версии postgres, которая поставляется с MacOS. Переустановка его (и, таким образом, восстановление собственного расширения) устранила проблему.
Самый надежный способ избежать этого - сделать
brew reinstall postgresql
Это сохранит ваше разрешение пользователя и т.д. все неповрежденное и все будет reset для нового. Работает все время!
Опция 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
Не нужно делать мягкую ссылку
Перейдя по этой проблеме также в MacOS Sierra, и когда мы запустили pg_ctl, как описано выше, мы получили следующую ошибку pg_ctl: no database directory specified and environment variable PGDATA unset
. Поэтому мы выполнили шаги здесь, которые решили нашу проблему, а именно:
mkdir ~/.postgres
initdb ~/.postgres
pg_ctl -D ~/.postgres start
Если postgres был установлен с использованием homebrew, вы можете исправить это, выполнив:
brew link postgres
Это сработало для меня (как смесь предыдущих ответов):
$ rm /usr/local/var/postgres/postmaster.pid
$ pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
Источник: https://coderwall.com/p/zf-fww/postgres-on-osx-with-homebrew-not-running-after-osx-crash
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"?
Похоже, ваш psql не запускается. Вы должны запустить его перед подключением. Вы можете сделать это, используя Postgres.app только для Mac OS. (Загрузите и установите это приложение http://postgresapp.com) Откройте приложение, и у вас есть сервер PostgreSQL, готовый и ожидающий новых соединений. Закройте приложение, и сервер выключится. Вы также можете найти эту информацию здесь http://www.postgresql.org/download/macosx/. Надеюсь, это поможет вам.
Это связано с тем, что предыдущий сервер все еще работает, попробуйте закрыть все и перезапустить приложение.
Для тех, кто использует эту команду и не работает, или файл не существует и использует Ruby on Rails
rm/usr/local/var/postgres/postmaster.pid
Или любая другая команда и просто продолжайте сбой.
Я решил эту проблему удалить с помощью Brew. Мне пришлось удалить с brew 2 раза, потому что при первом удалении останется другая версия postgresql, а вторая деинсталляция процесса будет завершена.
Установите postgresql с помощью Brew
Затем снимите, создайте и перенесите базы данных проекта
(Не забудьте запустить сервер postgresql)
¿Недавно вы изменили pg_hba.conf? если вы только что отметили любую опечатку:
local all all password
хост все все 127.0.0.1/32 пароль
host all all:: пароль 1/128
Иногда простая ошибка может дать нам головную боль. Я надеюсь, что эта помощь и извините, если мой английский вообще не годится.
Я столкнулся с этой проблемой после попытки восстановления/удаления/создания db, в то время как другие процессы обращались к ним. Исправление MacOSX/Homebrew было:
rails server
, rails console
, guard
и т.д.brew info postgres
У меня такая же ошибка. Оказывается, postgres просто не работает (обычно он работает в фоновом режиме, но по какой-то причине он не был сегодня).
Если это так, просто введите postgres
в командной строке вашего каталога проекта
После огромного количества назад и вперед это действительно сменилось на версию pg
gem, которую я использовал. На mavericks pg
version 0.15.1
не будет подключаться к порту 5432, но версия 0.17.1
работает просто отлично - очень странно.
Для меня это было обновление Apache, вызвавшее эту проблему. Я все еще могу запустить psql в консоли или вызвать db непосредственно из kdevelop. Также он работал над добавлением "host = localhost" в строку подключения.
НО реальная проблема заключалась в том, что apache изменился на private tmp.
Решение: Обновить /usr/lib/systemd/system/apache 2.service и изменить PrivateTmp = true для PrivateTmp = false.
Я работаю над ОС OpenSuse, но думаю, что что-то подобное может произойти на Mac.
У меня такая же проблема, потому что я использую неправильное имя пользователя Postgres в коде. Я вошел в postgres psql -d postgres
и введите \du
, чтобы взять имя роли и исправить имя пользователя Postgres.
Итак, когда вы, ребята, сталкиваетесь с этой проблемой, вы, ребята, должны убедиться, что используете правильное имя пользователя, пароль, имя хоста и базу данных Postgres...
Надеюсь, это поможет кому-то
Это происходит, когда сервер postgres не работает. Шаги, чтобы правильно установить Postgres через Homebrew на MAC:
brew install postgres
initdb/Users/<username>/db -E utf8
[Это инициализирует postgres для использования данного каталога в качестве каталога базы данных. Обычно не рекомендуется использовать каталог пользователя для хранения базы данных. Отредактируйте файл sudoers для добавления initdb и аналогичных команд, а затем запустите initdb в /usr/local/var/postgres]
pg_ctl -D/Users/<username>/db -l logfile start
[После успешного выполнения шага 2 будет предложено запустить шаг 3. Эта команда запускает сервер вручную.]