Postgres не может подключиться к серверу
После того, как я сделал brew update и brew upgrade, у моего 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 версия: Горный лев.
доморощенная версия: 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
66 ответов
Была похожая проблема; 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
удалил мои старые базы данных и затем повторно инициализировал схему postgres db.
Спасибо 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
Обновление базы данных работает для меня
brew postgresql-upgrade-database
На 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
в вашей базе данных. http://postgresapp.com/documentation
Проблема также может быть связана с аварийным процессом, который оставил файл 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
Это сработало для меня.
Самый надежный способ обойти это
brew reinstall postgresql
Это сохранит все ваши права пользователя и т. Д., И все будет сброшено на новый. Работает все время!
Убедитесь, что файл сокета существует.
$ 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
В моем случае проблема была вызвана обновлением Mac OS. Обновление PostgreSQL решило проблему.
# upgrade database version solved the trouble
$ brew postgresql-upgrade-database
Однако эта ошибка довольно распространена и имеет несколько возможных причин, вам не следует полностью полагаться на мое решение выше.
Для MacOS BigSur, домашние postgres:
-
rm /opt/homebrew/var/postgres/postmaster.pid
-
brew services restart postgresql
Это сработало для меня. Мне не нужно было удалять файлы
brew postgresql-upgrade-database
Это на самом деле то, что вы должны сделать:
вместо этого вы должны посмотреть на /usr/local/var/postgres/postmaster.pid
а затем посмотрите на первую строку файла - это плохой PID
Бежать
ps aux | grep <PID>
например:
ps aux | grep 12345
тогда делай
kill <PID>
например
kill 12345
Предполагая, что он все еще работает
https://superuser.com/questions/553045/fatal-lock-file-postmaster-pid-already-exists
не слушайте принятый ответ, это плохо и испортит ваши данные!!!
Это произошло со мной, когда я обновил с 9.3.4 до 9.5, поскольку базы данных несовместимы без обновления.
Я использовал pg_upgrade следующим образом:
Стоп постгрес
$ 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
Изменение настроек конфигурации postresql или database.yml, изменение $PATH или создание символических ссылок были для меня ненужными. Все, что мне нужно было сделать, это gem uninstall pg
а потом bundle
(или же gem install pg
).
Проблема заключалась в том, что pg gem был установлен до homegrew postgres, поэтому собирал настройки из версии postgres, которая поставляется с MacOS. Переустановка его (и, следовательно, восстановление собственного расширения) устранила проблему.
Я столкнулся с той же проблемой для psql (PostgreSQL) 9.6.11
,
что сработало для меня -
удалить postmaster.pid - rm /usr/local/var/postgresql@9.6/postmaster.pid
перезапустите postgres - brew services restart postgresql@9.6
Так что я застрял на этом после rails db:create
команда. Настройка среды в macOS Catalina 10.15.3.
Первое, что я проверил, это поток, который привел меня сюда. Убедившись, что все прошло гладко и не было ошибок, которые могли бы ускользнуть от меня, я попробовал самые популярные решения, но ни одно из них, похоже, не сработало.
До сих пор я видел единственную ошибку:
$ 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"?
Так что мне нужна была более конкретная информация о том, что происходило. По этой причине я решил посмотреть файл журнала postgres, который находится по адресу
/usr/local/var/log/postgres.log
Итак, после открытия журнала я увидел эту ошибку
LOG: starting PostgreSQL 12.2 on x86_64-apple-darwin19.3.0, compiled by Apple clang version 11.0.0 (clang-1100.0.33.17), 64-bit
LOG: could not translate host name "localhost", service "5432" to address: nodename nor servname provided, or not known
WARNING: could not create listen socket for "localhost"
FATAL: could not create any TCP/IP sockets
LOG: database system is shut down
Так что это немного более пояснительно и конкретно. Проблема в том, что PostgreSQL не может "видеть" и разрешать локальный сервер.
Следующее, что я сделал, это проверил файл /etc/hosts, содержимое которого по умолчанию должно выглядеть следующим образом:
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
Сравнив приведенное выше с моим, я увидел, что у меня эта строка была другой.
#::1 localhost
Поэтому я удалил символ # перед строкой, сохраненной файл, и повторно запустил
rails db:create
и база данных была успешно запущена.
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
Не нужно делать мягкую ссылку
Если postgres был установлен с помощью homebrew, это можно исправить, выполнив:
brew link postgres
Решение для MacOS M1 Монтерей
rm /opt/homebrew/var/postgres/postmaster.pid
brew services restart postgresql
Это сработало для меня (как смесь предыдущих ответов):
$ 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
Если вы выключите свою систему, не выходя из psql, postgres не удалит некоторые файлы.
Я не нашел файл postmaster.pid в каталоге usr / local / var / postgres
Итак, я сделал следующее:
сервисы brew запускают postgresql
Приведенная выше команда должна позволить вам запустить postgres
У меня та же проблема, потому что я использую неправильное имя пользователя Postgres в коде. Я вошел в postgres psql -d postgres
и введите \du
взять имя роли и исправить имя пользователя Postgres.
Поэтому, когда вы, ребята, столкнулись с этой проблемой, вам нужно убедиться, что вы используете правильное имя пользователя Postgres, пароль, имя хоста и базу данных...
Надеюсь, это поможет кому-нибудь
Эта проблема возникла и в MacOS Sierra, и когда мы запустили pg_ctl, как описано выше, у нас возникла следующая ошибка pg_ctl: no database directory specified and environment variable PGDATA unset
, Таким образом, мы следовали за шагами здесь, которые решили нашу проблему, а именно:
mkdir ~/.postgres
initdb ~/.postgres
pg_ctl -D ~/.postgres start
Для тех, кто использует эту команду и не работает, или файл не существует и использует Ruby on Rails
rm /usr/local/var/postgres/postmaster.pid
Или любую другую команду и просто продолжайте терпеть неудачу.
Я решил эту проблему, удалив с Brew. Мне пришлось удалить brew 2 раза, потому что при первом удалении останется другая версия postgresql, а при втором удалении процесс будет завершен.
Установите postgresql с Brew
Затем сбросьте, создайте и перенесите базы данных проекта
(Не забудьте запустить сервер postgresql)
Я столкнулся с этой проблемой после попытки восстановить / удалить / создать базу данных, пока другие процессы обращались к ним. MacOSX/Homebrew исправлено:
- закройте все остальные процессы доступа
rails server
,rails console
,guard
, так далее... - загрузка / выгрузка с использованием команд, найденных в
brew info postgres
- запустить восстановление / удаление / создание ранее
Похоже, ваш PSQL не работает. Вы должны запустить его до подключения. Вы можете сделать это, используя только Postgres.app для Mac OS. (Загрузите и установите это приложение http://postgresapp.com/) Откройте приложение, и у вас есть сервер PostgreSQL, готовый и ожидающий новых подключений. Закройте приложение, и сервер выключится. Вы также можете найти эту информацию здесь http://www.postgresql.org/download/macosx/. Надеюсь, что это поможет вам.