Файл сокета “/var/pgsql_socket/.s.PGSQL.5432” Відсутній у Mountain Lion (OS X Server)


95

Я щойно оновив свій сервер MacMini з Lion Server на Mountain Lion за допомогою OS X Server. У мене така ж проблема з PostgreSQL, як і в минулому році, коли я вперше встановив Lion Server.

Коли я намагаюся виконати будь-яку команду терміналу PostgreSQL, я отримую таке горезвісне повідомлення про помилку, яке багато хто отримував за ці роки:

psql: 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"?

Коли я отримав помилку, я намагався змінити пароль для _postgres. Я спробував кілька команд, але отримав ту ж помилку. Я просто перезавантажив свій сервер, але не пощастило. Я увійшов як root, щоб переглянути / var / pgsql_socket, і папка порожня. Папка / var / pgsql_socket_alt також порожня.

Я перевірив це в Інтернеті. Однак майже всі рішення, які я прочитав, включаючи Stack Overflow, пропонують видалити та перевстановити PostgreSQL. Я не знаю, але це не здається правдоподібним варіантом, оскільки декілька параметрів у програмі Server використовують PostgreSQL. Я зв’язався зі службою підтримки Apple Enterprise (без домовленості), і мені сказали, що мою проблему повинні вирішити розробники, які витратять 695 доларів.

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

Оновлення: 13.12.2012 15:33 GMT-6

Ось мій вихід для ps auwwx | grep postg:

_postgres      28123   0.0  0.1  2479696   7724   ??  Ss    3:01PM   0:00.04 /Applications/Server.app/Contents/ServerRoot/usr/bin/postgres_real -D /Library/Server/PostgreSQL For Server Services/Data -c listen_addresses= -c log_connections=on -c log_directory=/Library/Logs/PostgreSQL -c log_filename=PostgreSQL_Server_Services.log -c log_line_prefix=%t  -c log_lock_waits=on -c log_statement=ddl -c logging_collector=on -c unix_socket_directory=/Library/Server/PostgreSQL For Server Services/Socket -c unix_socket_group=_postgres -c unix_socket_permissions=0770
server1        28216   0.0  0.0  2432768    620 s000  R+    3:02PM   0:00.00 grep postg
_postgres      28138   0.0  0.0  2439388    752   ??  Ss    3:01PM   0:00.01 postgres: stats collector process                           
_postgres      28137   0.0  0.0  2479828   1968   ??  Ss    3:01PM   0:00.00 postgres: autovacuum launcher process                           
_postgres      28136   0.0  0.0  2479696    544   ??  Ss    3:01PM   0:00.00 postgres: wal writer process                           
_postgres      28135   0.0  0.0  2479696    732   ??  Ss    3:01PM   0:00.01 postgres: writer process                           
_postgres      28134   0.0  0.0  2479696    592   ??  Ss    3:01PM   0:00.00 postgres: checkpointer process                           
_postgres      28131   0.0  0.0  2439388    368   ??  Ss    3:01PM   0:00.00 postgres: logger process 

Оновлення: 13.12.2012 18:10 GMT-6

Після інтенсивного пошуку в Інтернеті це відео було знайдено. Я зміг змусити PostgreSQL працювати і видалити помилку. Я можу підключитися за допомогою pgadmin та phppgadmin. Я збирався повернутися до Lion Server через чисте розчарування. Зараз мені не доведеться.

http://www.youtube.com/watch?v=y1c7WFMMkZ4


22
Ваша проблема зводиться до того, що попередньо встановлена ​​версія PostgreSQL для Mac OS X psqlє у вас PATHдо встановленої версії. Шукають розетку unix у різних місцях. Або використовуйте tcp / ip, вказавши -h localhostабо бажано виправити свій, PATHщоб psqlспочатку був знайдений правильний . Химерне рішення Apple не лише поєднати PostgreSQL, але і возитися з ним, щоб воно розставляло речі на нестандартних місцях, є першопричиною цієї проблеми.
Крейг Рінгер

3
У OSX постійно виникає проблема, коли пакувальники вирішили поставити сокет Unix-домену в інше місце, ніж зазвичай. Дозвольте мені шукати ... BRB ... stackoverflow.com/a/8482546/905902
wildplasser

Я скопіював старий PATH у .bashrc. Я не встановив іншу версію postgreSQL. Ось моя заява PATH, яка включає код для RVM. Якщо хтось може сказати мені, що змінити на це, я це зроблю. Коли я роблю, який psql він знаходиться в / usr / bin / psql. Щиро дякую всім вам за допомогу. PATH = "$ PATH: $ HOME / .rvm / bin: / usr / bin / psql: / usr / local: / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin" Я також шукаю файл сокета під час входу в систему як root.
Памела Кук - LightBe Corp

1
Для тих, хто використовує homebrewі osx@CraigRinger може мати правильну відповідь для вас, підтвердьте за допомогою brew doctor.
Karthik T

Відповіді:


299

Я зміг додати наступне до свого .bash_profile, щоб запобігти помилці:

export PGHOST=localhost

Це працює, оскільки :

Якщо ви опустите ім'я хосту, psql підключиться через сокет Unix-домену до сервера на локальному хості або через TCP / IP до localhost на машинах, які не мають сокетів Unix-домену.

Ваша ОС підтримує сокети доменів Unix, але сокет Unix PostgreSQL, який psqlпотребує або не існує, або знаходиться в іншому місці, ніж очікується.

Явне вказівку імені хосту як localhostзмушує psqlвикористовувати TCP / IP. Встановлення змінної середовища PGHOST- один із способів досягти цього. Це задокументовано в керівництві psql .


37
Для всіх, хто стикається з цим за допомогою програми Rails: ви можете вказати хост у database.yml.
dwhalen

12
Що це за чаклунство? Я маю на увазі серйозно. Не могли б ви пояснити?
Sreejith Ramakrishnan

1
Я завжди повертаюся до цієї відповіді! Знову врятував моє життя. Цей фрагмент дійсно належить цій сторінці, postgresapp.com/documentation/cli-tools.html .
sambecker

1
Не знаю чому, але мені це вдається! Я зіткнувся з цією проблемою в rails 5, коли використовую 'rails db: create', але я вже встановив host: localhostin в database.yml. @dwhalen
Spark.Bao

1
Це працювало для Rails 5.2 без змін database.yml, коли ця помилка з’явилася після зниження Postgres до старішої версії, керованої Homebrew.
SexxLuthor

37

Спробуйте вставити в консоль це:

$ mkdir /var/pgsql_socket/ 

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

Нарешті, я отримав цю відповідь.
Abs

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

23

Я зміг це вирішити, просто заповнивши 127.0.0.1 для адреси хосту PostgreSQL, а не залишаючи його порожнім. (Приклад Django)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'database_name',
        'USER': 'database_user',
        'PASSWORD': 'pass',
        'HOST': '127.0.0.1',
        'PORT': '',
        }
}

1
Зараз я відчуваю себе німо, я намагаюсь вирішити цю проблему близько 2 днів. У Windows я використовував '127.0.0.1', але потім я переніс свій код на робочу версію (Debian 7) і повинен був змінити його на ''. Це якось дивно, що вони видають таке повідомлення про помилку, яке змушує людей повірити, що проблема може бути десь в іншому місці.
fang_dejavu

10

Відкрийте 'postgresql.conf' у вашому улюбленому редакторі. Шукайте змінну 'unix_socket_directories', вона, швидше за все, буде виглядати так:

unix_socket_directories = '/private/tmp/'

Змініть рядок на такий:

unix_socket_directories = '/var/pgsql_socket/'

Зверніть увагу, якщо ви хочете, щоб сокет-файли були розділені декількома комами каталогу.


Це мало бажаний ефект від спроби створити сокет в іншому місці, але сервер не запускався, оскільки він не мав дозволів на створення файлів у каталозі / var. У підсумку я змінив файли конфігурації на більш високий рівень, щоб просто використовувати сокет там, де він був спочатку. Практично так, як зазначено у цій відповіді stackoverflow.com/a/29511357/1535177 .
Eosis

9

Набагато більш просте рішення (завдяки http://daniel.fone.net.nz/blog/2014/12/01/fixing-connection-errors-after-upgrading-postgres/ ). Я перейшов на postgres 9.4. У моєму випадку все, що мені потрібно було зробити (після дня гуглиння та невдалого успіху)

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

Перезапустіть webrick, і готово!


7

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

Наприклад, у програмі Ruby on Rails відредагуйте /config/database.yml:

development:
  adapter: postgresql
  encoding: unicode
  database: database_name
  pool: 5
  host: localhost

Примітка: останній рядок, доданий для зазначення хоста. До оновлення до Йосеміті мені ніколи не потрібно було вказувати хоста таким чином.

Сподіваюся, що це комусь допоможе.

Ура


Мені потрібно було встановити мого хоста в каталог, у якому я знайшов .s.PGSQL.5432файл.
Eosis

5

Перевірте стан бази даних:

service postgresql status

Якщо база даних не запущена, запустіть db:

sudo service postgresql start

застряг із наведеною вище помилкою та вирішив її, запустивши db.
Sivakumar RJ

4

Чи можете ви перевірити файл postgresql.conf ??

На якому порту працює ваш postgres ??

Я думаю, що він не працює на порту 5432. Якщо не змінити його на 5432

АБО при використанні терміналу

psql -U  postgres -p YOUR_PORT_NUMBER database_name

1
Я не можу запустити команду терміналу. Я отримую ту ж помилку. Мені потрібна допомога щодо того, де я можу знайти файл postgresql.conf. Раніше у мене була папка / var / pgsql під час запуску Lion Server. Я думаю, цього зараз немає. Я щойно опублікував свої результати для команди ps grep. Я включив службу Wiki, щоб запустити PostgreSQL. Мені сказали, що я можу використовувати команди sudo serveradmin, не вмикаючи жодні сервісні програми, але вони не працюють. Зараз я ввійшов до системи як root, тому мав змогу робити що завгодно :) Я перевірив порти в Network Utility. 5432 не використовується.
Памела Кук - LightBe Corp

2

У мене була ця проблема з Django.

Виправте це, явно встановивши для вашого імені хосту значення "localhost".


2

я роблю на словах, роблячи це:

dpkg-reconfigure locales

і оберіть бажані місця

pg_createcluster 9.5 main --start

(9,5 - це моя версія postgresql)

/etc/init.d/postgresql start

а потім це слово!

sudo su - postgres
psql



1
psql: 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"?

Я продовжував отримувати вищезазначену помилку, і жодне з вищезазначених рішень не працювало для мене. Нарешті, наступне рішення вирішило мою проблему на Mac OS X

Встановіть postgres за допомогою заварювання

brew install postgres

Встановіть служби заварювання

brew tap homebrew/services

Щоб запустити postgres як фонову службу

brew services start postgresql

Щоб зупинити postgres вручну

brew services stop postgresql

Ми також можемо використовувати служби заварювання для перезапуску Postgres

brew services restart postgresql

1

перевірте, чи працює сервер postgres з наступним кодом

sudo service postgresql status

якщо сервер postgres неактивний, напишіть таку команду.

sudo service postgresql start

1

Я отримав цю помилку після того, як мій комп'ютер завис і перезавантажився самостійно. Рішення для мене не було знайдено на цій сторінці, скоріше в іншому дуже високо оціненому запитанні SO з тією ж помилкою psql: не вдалося підключитися до сервера: Немає такого файлу або каталогу (Mac OS X) . Відповідь: просто видаліть цей файл /usr/local/var/postgres/postmaster.pid, тоді brew services restart postgresqlзробив трюк. Прислухайтеся до попередження зв’язаної відповіді про вбивство процесів postgres, перш ніж робити це, інакше ви можете пошкодити свій db назавжди.


0

Дозволи на файли обмежені для бази даних Postgres, що належить Mac OS. Ці дозволи скидаються після перезавантаження або перезапуску Postgres: наприклад, serveradmin start postgres.

Отже, тимчасово скиньте дозволи або право власності:

sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser"  /var/pgsql_socket/.s.PGSQL.5432

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


0

Це зайняло у мене деякий час, але мені вдалось остаточно домогтися цього, переглянувши запропоновані пропозиції та зробивши додаткові пошукові запити в Інтернеті. Я використав інформацію в наступному відео YouTube, створеному Mactasia:

http://www.youtube.com/watch?v=y1c7WFMMkZ4

Коли я це зробив, я побачив файл із розширенням .lock. Однак я все-таки отримав помилку, коли намагався запустити Rails Server, коли відновив роботу над моєю програмою Rails за допомогою PostgreSQL. Цього разу я отримав дозвіл на відхилення помилки. Тоді я згадав, що мені не тільки довелося змінити адреси прослуховування у списку, але й змінити unit_socket_permissions на 0777. Я також увійшов до системи як root, щоб змінити дозволи в папці var / pgsql_socket, де я міг отримати до нього доступ у рівень користувача. Postgres зараз працює нормально. Я перезавантажую свої дані зі своєї резервної копії SQL.

Я не зрозумів, що коли я ввімкнув wiki, PostgreSQL нібито працював, коли я робив sudo serveradmin fullstatus postgres, але я все-таки отримав помилку. Що ж, добре.


0

Я щойно створив новий кластер, і який працював для мене, я використовував (PostgreSQL) 9.3.20:

sudo pg_createcluster 9.3 main --start

0

Спочатку видаліть встановлений postgres:

sudo apt-get purge postgr*
sudo apt-get autoremove

Потім встановіть 'synaptic':

sudo apt-get install synaptic
sudo apt-get update

Потім встановіть Postgres

sudo apt-get install postgresql postgresql-contrib

0

Для програми RubyOnRails додайте, localhost якщо ви використовуєте власну версію Postgresql

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