Помилка PostgreSQL "Не вдалося підключитися до сервера: Немає такого файлу чи каталогу"


136

Як і деякі інші, я отримую цю помилку, коли запускаю 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включає два файли PostgreSQL .plist. Я не впевнений, чи це актуально.

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, але в основному ви символізуєте 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, яку ви хочете запустити, ДОПОМОГА ДО ПЕРЕД шляху до PostgreSQL системи OS X.

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


Ви коли-небудь знаходили рішення для цього? Я бачу, ви не позначили жодного. Жоден із них мені також не допомагає.
Андрас Дьомрей

Це все ще здебільшого води та дивні втілення, щоб змусити його працювати. Я щойно додав [Редагувати 2] вище із посиланням із ще деякими пропозиціями та способом зробити симпосилання відповідно до моїх коментарів до редагування. Зрештою, Symlink працював на мене, але я думаю, що я також деінсталював та перевстановив postgres та домашню мову там по дорозі, тому важко зрозуміти, що саме змінило ситуацію. Удачі. Повідомте про те, якщо ви виявите щось нове, 15000 переглядів цього питання це щось, що доставляє багатьом людям біль!
Еволюція

@AndrasGyomrey Я щойно повернувся з RailsCamp15 в Австралії, і люди сказали, що головне - правильно виправити файл файлу, я редагував редагування 3 вище, щоб пояснити це.
Еволюція

Майте на увазі, що запускаючи звіт про startctl про щось завантажене, НЕ обов'язково означає, що він працює та працює. Ви повинні поглянути на bigsql.com як альтернативу; працює на Mac і має гарний інтерфейс управління.
Джим Насбі

Відповіді:


102

Переконайтесь, що в каталозі postgres немає, мабуть, postmaster.pid /usr/local/var/postgres/

видаліть це та запустіть сервер.

Перевірка - https://github.com/mperham/lunchy - це чудова обгортка для startctl.


3
Це працювало для мене. Я тільки щойно встановив йосеміт та завантажив postgres з домашнього пива. Перший раз, коли я його використав, спрацював чудово, але ця проблема виникла після перезавантаження. Отже, чи можете ви пояснити, чому це спрацювало?
Ден Вільямс

2
працював на мене, але для новичок, може хтось пояснить, чому і наскільки це безпечно
Олександр Міллс

58

" Postgres.app " - це краще виправлення, якщо ви перебуваєте на OS X


Ось виправлення:

  1. Зупиніть базу даних
  2. cd /var
  3. rm -r pgsql_socket
  4. ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. Перезавантажте PostgreSQL (не ваш комп'ютер)

Більше інформації можна отримати у " postgresql 9.0.3. На Lion Dev Preview 1 ".


2
Помилки для мене, і це виправлення не допомогло. Мені здається, що я, наткнувшись у темній кімнаті, працюючи, щоб зрозуміти, що насправді відбувається, і сам процес застосувати виправлення. Чи можна було б вам пояснити, як я міг діагностувати та виправити це питання?
Еволюція

Працює для мене. /tmpПочувається трохи дивним, щоб чхати на _postgres, але ей :)
wrdevos

postgresapp працює, але чому я не можу запустити сервер у терміналі? Після того як я закрив цю програму, проблема повернеться, як очікувалося.
hakunami

Це працювало для мене, але зауважте, що ви повинні мати root або використовувати sudo для виконання №2 - 4. Також, будь ласка, уточніть крок №5 - вам потрібно лише перезапустити postgres, а не комп'ютер.
mpelzsherman

2
Великі літери не дають кращої відповіді. Все ще чудово встановити та запустити Postgres через Homebrew (послуги.)
Дренмі

55

Для мене це працює

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
Obromios

4
Мені також довелося перезапустити postgres, коли встановлено домашньою мовою, ви можете це зробити так:brew services restart postgresql
santuxus

2
У No such file or directoryмоєму випадку я перебуваю в docker env
Сарз

2
rm: /usr/local/var/postgres/postmaster.pid: Немає такого файлу чи каталогу
nourza

13

Це працювало для мене за вказану вами помилку. Зробіть одну з таких дій:

  1. Можливо, змініть свій порт за замовчуванням, вказаний у postgres.confфайлі, якщо ви використовували щось інше, ніж порт за замовчуванням 5432під час встановлення.

  2. Змініть номер порту postgresql.confта перезапустіть сервер БД.

  3. Замість psqlвведення повної команди:

    psql -p 5432 -h localhost   
    • ім'я сервера та номер порту

1. Я думаю, що моє встановлення було б відповідно до значень за замовчуванням.
Еволюція

2. Я міг би це змінити, будь-які наслідки зміни порту?
Еволюція

3. Додано мій вихід із 3 вище.
Еволюція

Варіант 3 працює з користувацьким портом. Оскільки у мене встановлено декілька серверів pg (PostgreSQL 9.1, 9.2 та 9.3), мені довелося також вказати на правильний psql.
gpasse

11

Якщо ви використовуєте Homebrew, видаліть Postgresql end pg gems: *

$ gem uninstall pg
$ brew uninstall postgresql

Завантажте та запустіть такий сценарій, щоб виправити дозвіл на / 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

Щоб запустити запуск postgresql при запуску входу:

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

Або почніть вручну.

Встановіть pg gem

$ gem install pg

Сподіваюся, допомогли


Від brew info postgres:ARCHFLAGS="-arch x86_64" gem install pg
wrdevos

1
це не видалить записи в db?
kibaekr

initdb /usr/local/var/postgres -E utf8працює. Дякую купу.
Кріс Йон

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

" Встановити домашню версію конкретної версії формули? " Пропонує набагато більш вичерпне пояснення разом з альтернативними способами усунення проблеми.


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

Я вважаю це корисним і актуальним, хоча, можливо, не безпосередньо. Він вирішив проблему, просто перемикаючи версії, використовуючи варити, що є досить розповсюдженим інструментом, і просто повторив кроки, поки що чудово, посилання потрапляє на більше питань, характерних для заварювання, однак я можу побачити ваше запитання, що це значення в контексті питання ОП.
wkhatch

7

Я вирішив це, оновивши postgres.

brew update
brew upgrade

Тоді мені довелося також оновити бази даних, щоб вони були сумісні з новою основною версією, тому що я оновив з 10 до 11.

brew postgresql-upgrade-database

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


Я отримав цю помилку Помилка: не встановлена ​​версія postgresql 9.3. *!
нурза

5

Тому для багатьох питань тут, здається, люди вже запускали psql і мусили видалити postmaster.pid . Однак у мене не було цього питання, оскільки у мене ніколи навіть не було встановлено postgres в моїй системі належним чином.

Ось рішення, яке працювало для мене в MAC OSX Yosemite

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

Сподіваюся, це допомагає! Toodles!

Також ця відповідь мені найбільше допомогла: https://stackoverflow.com/a/21503349/3173748


Це не вказує на додаток Postgres, а не на варильну установку? Це може відрізати вас від деяких корисних пакетів (наприклад, pgrouting, який ви не можете встановити для програми Postgres, що спричинило мені нескінченне горе і ось я зараз)
allthesignals

4

При запуску: psql -p 5432 -h localhost він не використовує драйвер зворотного зв'язку, але використовує справжній сокет, а значить, вам потрібно налаштувати постгреси, щоб прийняти з'єднання з сокетом. Отже, навіть хоча pgadmin та інші клієнти можуть працювати, psql не буде.

Вам потрібно змінити як файл postgresql.conf, так і файли pg_hba.conf, щоб вони могли з'єднуватися через реальний сокет. Це також дозволить з’єднатись із віддаленим ip, через що він відключений за замовчуванням.

Ці файли знаходяться в каталозі даних, але фактичне місце розташування може бути різним, залежно від того, як було встановлено постгреси. Запустивши команду postgres, виконайте команду:

ps -ef | grep postmaster

Ці два файли - -D каталог (можливо / usr / local / pgsql / data).

Для файлу postgresql.conf скасуйте коментар liste_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- використовуйте netstat -anp, щоб побачити, що, якщо що, слухає на 5432. Якщо Mac OSX PG вже слухає цей порт, то це може бути проблемою.

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


Дякуємо, що сприяли цьому. Якщо це допомагає дати вам трохи більше фону, homebrew просто запускає цей сценарій під час встановлення постгресів. github.com/Homebrew/homebrew-core/blob/master/Formula/… Я сподіваюся, що ви можете переглянути його та, можливо, поділитися будь-яким подальшим розумінням того, що ви знайдете. Я думаю, що люди потребують, це простіший спосіб налагодити, чому вони отримують цю помилку, щоб вони знали, що потрібно вжити.
Еволюція

На основі того, що я можу зрозуміти у цьому скрипті, існує "postgres.log" у каталозі "var", можливо, під HOMEBREW_PREFIX. Цей файл журналу буде містити інформацію про PG, який намагається запустити (у тому числі, якщо він не вдалося запустити з якихось причин). Ось приклад повідомлення, що показує, що PG не запускається через інший процес прослуховування порту 5432:
Stephen Frost

2016-12-19 09: 11: 59.582 EST [20669] ЛОГ: не вдалося прив’язати сокет IPv4: Адреса вже використовується 2016-12-19 09: 11: 59.582 EST [20669] Підказка: ще один поштовий майстер вже працює на порту 5432 ? Якщо ні, зачекайте кілька секунд і повторіть спробу. 2016-12-19 09: 11: 59.582 EST [20669] УВАГА: не вдалося створити розетку прослуховування для "localhost" 2016-12-19 09: 11: 59.582 EST [20669] FATAL: не вдалося створити жодних розеток TCP / IP 2016 -12-19 09: 11: 59.582 EST [20669] ЛОГ: система БД закрита
Стівен Мороз

Крім того, схоже, що скрипт не змінює каталог сокетів за замовчуванням, так що має бути / tmp /. Ви можете заглянути в каталог даних PG (який видається {HOMEBREW_PREFIX} / var / postgres) для файлу postgresql.conf і шукати "unix_socket_directories". Він коментується за замовчуванням, але має встановлений за замовчуванням, наприклад:
Stephen Frost

#unix_socket_directories = '/ tmp' # список каталогів, розділених комами
Stephen Frost

2

Я зіткнувся з цією помилкою під час роботи на Mac 10.15.5 за допомогою homebrew.

Існує файл під назвою postmaster.pid, який повинен автоматично видалятися, коли postresql виходить.

Якщо це не зробити наступне

  • Служби заварювання зупиняють postgresql <--- Якщо не вдалося вийти, перш ніж rm може пошкодити db
  • sudo rm /usr/local/var/postgres/postmaster.pid

1

Причина

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

Рішення

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

Віа

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


1

Однією з причин виникнення цієї помилки є те, що ваша локальна база даних postgres вимикається при перезавантаженні комп'ютера. У новому вікні терміналу просто введіть:

$psql -h localhost 

перезапустити сервер.


1

Привіт світ :)
Найкращий, але дивний спосіб для мене був робити наступні справи.

1) Завантажте postgres93.app або іншу версію. Додайте цю програму в / програми / папку.

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

експортувати PATH = / Програми / Postgres93.app / Зміст / MacOS / бін /: $ PATH
Це шлях до psqlз Postgres93.app. Рядок (команда) виконується кожного разу, коли запускається консоль.

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

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

5) Крім того, якщо ви хочете графічно бачити свої бази даних, вам слід встановити PG Commander.app. Це хороший спосіб бачити ваші БД постгрес як гарні таблиці даних

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


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

Це працює для мене.


Цей файл для мене не існує
allthesignals

1

для чого це варто, я зазнав цю саму помилку, коли у мене був друк ( md4замість md5) у моєму pg_hba.confфайлі (/etc/postgresql/9.5/main/pg_hba.conf )

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


де pg_hba.confфайл?
bubakazouba

1
/etc/postgresql/{postgres_version}/main/pg_hba.conf
Айдан Мелен

0

Можливі різні проблеми із локальним запуском PostgreSQL. Я б рекомендував очистити всі встановлені версії postgres і почати свіжими. Після того, як ви встановите його, дуже легко відтворити базу даних, якщо у вас є актуальний проект рейлівdb/schema.rb

Ось як я зазвичай встановлюю PostgreSQL на Mac . Якщо ви локально запускаєте свою базу даних під кореневим користувачем, можливо, ви захочете опустити останній крок, який створює todoкористувач


0

Однією з причин може бути те, що

unix_socket_directories у файлі postgresql.conf не вказаний у каталозі, який він шукає.

У прикладі запитання шукає каталог / tmp, це потрібно вказати у файлі postgresql.conf

щось на зразок цього:

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

Це рішення спрацювало на мене.


0

Якщо ви користуєтесь MacOS і використовуєте домашню мову, я вважаю цю відповідь надзвичайно корисною:

https://stackoverflow.com/a/27708774/4062901

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

Також після ручної міграції, яку вони пропонують (яка працює, але), я виявив, що більше немає таблиці для мого користувача. Спробуйте скористатися цією командою, щоб виправити це: createdb(відповів через psql: FATAL: база даних "<користувач>" не існує )


0

Просто перезапустіть Postgres, як тільки з’явиться помилка запуском, brew services restart postgresqlа потім спробуйте ще раз


0

команда для мене rm /usr/local/var/postgres/postmaster.pidне спрацювала, тому що я встановив конкретну версію postgresql з homebrew.

правильна команда rm /usr/local/var/postgres@10/postmaster.pid.

то brew services restart postgresql@10.


-5

Це дуже просто. Додайте лише хост у файл database.yaml.


хост: 127.0.0.1 або хост: localhost, наприклад.
Рікардо - Nextv

Усі люблять просте рішення. Але як це працює? Як я вже говорив у своїх коментарях вище, пошук цього шляху звів мене з багатьох складних маршрутів. Чи можете ви трохи розібратися і дати нам трохи більше інформації про те, що ви бачите проблему насправді та як ця проста зміна вирішує проблему. Дякуємо, що долучились до цього! :)
Еволюція

Різниця полягає в тому, що в IP-з'єднанні немає проблем, де знаходиться файл сокета; натомість ви переживаєте про IP-адресу.
Джим Насбі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.