Не вдається підключитися до сервера Postgres, що працює через служби заварювання


86

Я шукав рішення для цього і не міг знайти діючого рішення.

Я встановив postgres за допомогою brew ( brew install postgres) у своєму MacBook, і зараз я запускаю його за допомогою служб brew ( brew services list відображає postgres як запущений сервіс). Однак, коли я намагаюся запустити, psqlя отримую наступну помилку.

psql: не вдалося підключитися до сервера: немає такого файлу чи каталогу. Чи працює сервер локально та приймає підключення до сокета домену Unix "/tmp/.s.PGSQL.5432"?

Хтось уже вирішував подібну проблему?

Відповіді:


199

У мене була та ж помилка, і я виправив її, видаливши файл pid процесу:

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


Дякую, це працює! Але чому? Як? Чи запускати цю команду після кожного перезапуску?
rap-2-h

14
@ rap-2-h Здається, Postgres не закривається належним чином. Я отримую цю проблему, коли мені доводиться вимикати Mac, утримуючи кнопку живлення.
Вільсон Сільва,

6
Якщо ви використовуєте кег конкретної версії (приклад: postgresql@9.6), переконайтеся, що використовуєте правильну папку замість "/ postgres /"
В'яцеслав Гедровіц

1
Справді, це пов’язано з тим, що macOS не вимикає належним чином postgres, але для мене це навіть трапилося, коли я використовував меню Apple + "Вимкнути ...", тому це конкретно не стосується примусового вимкнення (вже принаймні, macOS 10.14.3). Це виправило, великі пальці вгору (y)
SidOfc,

1
Якщо це не допомогло, спробуйте tail /usr/local/var/log/postgres.log. Це може дати вам більше інформації про те, чому саме postgres не працює. Зазвичай ви можете опублікувати повідомлення про помилку з цього журналу в google і знайти інше виправлення на StackOverflow :-D
edan

92

Я зіткнувся з цією проблемою сьогодні. postgres перестав приймати зв’язки, хоча homebrew думав, що він працює.

Щоб виправити це, я побіг,

brew services restart -vvv postgresql

Вихід з цієї команди,

==> Successfully stopped `postgresql` (label: homebrew.mxcl.postgresql)
==> Generated plist for postgresql:
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
   <plist version="1.0">
   <dict>
     <key>KeepAlive</key>
     <true/>
     <key>Label</key>
     <string>homebrew.mxcl.postgresql</string>
     <key>ProgramArguments</key>
     <array>
       <string>/usr/local/opt/postgresql/bin/postgres</string>
       <string>-D</string>
       <string>/usr/local/var/postgres</string>
     </array>
     <key>RunAtLoad</key>
     <true/>
     <key>WorkingDirectory</key>
     <string>/usr/local</string>
     <key>StandardErrorPath</key>
     <string>/usr/local/var/log/postgres.log</string>
   </dict>
   </plist>

Тоді я подумав, хм, можливо, щось є у цьому журналі,

tail -n 10 /usr/local/var/log/postgres.log

Звичайно,

[4826] FATAL:  lock file "postmaster.pid" already exists
[4826] HINT:  Is another postmaster (PID 1489) running in data directory "/usr/local/var/postgres"?

Отже, я видалив цей файл

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

І все знову запрацювало.


9
Найкориснішою для мене була командаtail -n 10 /usr/local/var/log/postgres.log
Нік Роз

41

У моєму випадку postmaster.pidфайлу навіть не було. Попрацював, оновивши postgres.

brew update
brew upgrade

Потім, оскільки я модернізував основну версію з 10 до 11, мені також довелося запустити таку:

brew postgresql-upgrade-database

(джерело https://github.com/facebook/react-native/issues/18760#issuecomment-410533581 )


3
У цих випадках у /usr/local/var/log/postgres.logфайлі може бути це кілька останніх журналів: FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 11, which is not compatible with this version 12.2.
dijonkitchen

Я зрозумів саме цю проблему. Оновлення з postgresql 11 до 12 не вдалося, але видалення та встановлення знову допомогло.
FooF

16

Я б поєднав тут дві відповіді Вільсона та Коника.

Ви можете перевірити файл plist для служби postgres за допомогою, brew services listщоб знайти розташування файлу і просто відкрити його у вашому улюбленому редакторі.

Ви повинні побачити значення, StandardErrorPathвказане як:

<key>StandardErrorPath</key>
<string>/usr/local/var/log/postgres.log</string>

І тоді вам слід залишити кінець файлу журналу за допомогою tail -n 100 /usr/local/var/log/postgres.log

У моєму випадку помилка полягала в наступному:

06.12.2017 11: 51: 16.078 GMT [85476] FATAL: файл блокування "postmaster.pid" уже існує 06.12.2017 11: 51: 16.078 GMT [85476] ПІДКАЗКА: Чи працює інший начальник пошти (PID 601) каталог даних "/ usr / local / var / postgres"?

Це було тому, що мені довелося жорстко вимкнути свій Mac, і postgres не отримав можливості очистити файл PID. Просто видаліть файл PID rm /usr/local/var/postgres/postmaster.pidі запустіть postgresbrew services start postgresql

Слово попередження: не видаляйте цей файл PID, якщо ви не впевнені, що postgres не запущений . Ви можете зробити це, запустивши, brew services stop postgresqlа потім дочекавшись результату, brew services listщоб показати posgres у зупиненому стані.


5

Мені вдалося видалити /usr/local/var/postgres/папку, а потім знову видалити та встановити postgres


8
Вам слід спробувати інші відповіді, перш ніж це робити.
Жан

3

У мене виникла та сама помилка під час встановлення postgresql93 з крана версій. Перевіряючи файл .plist, вказаний у результатах brew services list( ~/Library/LaunchAgents/homebrew.mxcl.postgresql93.plist), я знайшов таке повідомлення:

FATAL: каталог даних "/ usr / local / var / postgres" має груповий або світовий доступ
ДЕТАЛЬНО: Дозволи повинні бути u = rwx (0700).

Що призвело мене до такої відповіді: каталог даних "/ usr / local / var / postgres" має неправильне право власності

Після запуску sudo chmod -R 700 /usr/local/var/postgresя отримав іншу помилку:

FATAL: не вдалося відкрити каталог "pg_tblspc": Немає такого файлу чи каталогу

Що потім привело мене до: `pg_tblspc` відсутній після встановлення останньої версії OS X (Yosemite або El Capitan)

Після запуску mkdir /usr/local/var/postgres/pg_tblspc/кластер успішно запустився.


3

Якщо у вас встановлено кілька версій postgresql. Нижче згадані команди виконають роботу з видалення ідентифікатора процесу (pid) та його перезапуску. Просто переконайтеся, що вибрали правильну версію.

rm -f /usr/local/var/postgresql@9.6/postmaster.pid

brew services restart postgresql@9.6   

Будь ласка, також зверніться до відповіді Еріка Корнера, щоб підтвердити, чи проблема стосується "файлу блокування postmaster.pid уже існує" у файлі журналу.


1

оновіть його за допомогою команди

  brew postgresql-upgrade-database

якщо у вас є така помилка Команда 'brew' не знайдена, але її можна встановити за допомогою: sudo apt install linuxbrew-wrapper

потім встановіть його за допомогою команди

 sudo apt install linuxbrew-wrapper

0

У моєму власному випадку postgres.logфайл містить це. HINT: Is another postmaster already running on port 5432? If not, remove socket file "/tmp/.s.PGSQL.5432" and retry.Після видалення сокетного файлу та перезапуску все працювало нормально. Зверніть увагу, що це прихований файл і не буде видно у вікні браузера. Видалення повинно здійснюватися через командний рядок.


0

Можливо, ви бачите конфлікт версій libssl / libcrypto.

brew services start postgres журнали дали мені нада, але запускаються вручну pg_ctl -D /usr/local/var/postgres start вказували на:

відсутнє визначення _RAND_cleanup у /.../openssl/lib/libcrypto.1.0.0.dylib

Спробуй:

brew tap-new $USER/old-openssl
brew extract --version=1.0.2t openssl $USER/old-openssl
brew install openssl@1.0.2t

# and then either brew link openssl@1.0.2t or symlink the required files to current openssl
ln -s /usr/local/Cellar/openssl/openssl@1.0.2t/lib/libcrypto.1.0.0.dylib /usr/local/opt/openssl/lib/libcrypto.1.0.0.dylib
ln -s /usr/local/Cellar/openssl/openssl@1.0.2t/lib/libssl.1.0.0.dylib /usr/local/opt/openssl/lib/libssl.1.0.0.dylib

0

Якщо всі інші відповіді не спрацюють ...

Я бачив це саме повідомлення та прийняту відповідь, що працює

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

не працював. Ні

rm -f /usr/local/var/postgres@9.6/postmaster.pid після того, як я згадав, у мене була встановлена ​​конкретна версія.

Я зробив cat /usr/local/var/log/postgresql@9.6.logі побачив:

FATAL:  lock file "postmaster.pid" already exists
HINT:  Is another postmaster (PID 1231) running in data directory "/usr/local/var/postgresql@9.6"?
> ps aux|grep 1231
[...] /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/libexec/mobileassetd

** мисляче обличчя **

Закрито iOS Simulator. Postgres перезапустився самостійно.

Це на робочому столі, і вчора у нас було відключено живлення, тому, грунтуючись на інших відповідях, я підозрюю, що основною причиною є сильне відключення, не даючи речам шансів на очищення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.