Файл сокета «/var/pgsql_socket/.s.PGSQL.5432» отсутствует в Mountain Lion (сервер OS X)


95

Я только что обновил свой MacMini Server с 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. Я не знаю, но это не кажется правдоподобным вариантом, потому что несколько вариантов в серверном приложении используют 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, но и возиться с ним, чтобы поместить вещи в нестандартные места, является основной причиной этой проблемы.
Craig Ringer

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
Что это за колдовство? Я серьезно. Могли бы вы объяснить?
Сриджит Рамакришнан

1
Я всегда возвращаюсь к этому ответу! Снова спас мою жизнь. Этот фрагмент действительно принадлежит этой странице postgresapp.com/documentation/cli-tools.html .
Sambecker

1
Не знаю почему, но у меня это работает! Я столкнулся с этой проблемой в rails 5, когда использую rails db: create, но я уже установил ее host: localhostв 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

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. В моем случае все, что мне нужно было сделать (после дня поиска в Google и безуспешного)

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

Примечание: последняя строка добавлена ​​для указания хоста. До обновления до Yosemite мне никогда не нужно было указывать хост таким образом.

Надеюсь, это кому-то поможет.

Ура


Мне нужно было установить мой хост в каталог, который, как я обнаружил, содержал .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. Раньше при запуске Lion Server у меня была папка / var / pgsql. Думаю, теперь этого больше нет. Я только что опубликовал свой вывод для команды ps grep. Я включил службу Wiki, чтобы запустить PostgreSQL. Мне сказали, что я могу использовать команды sudo serveradmin без включения каких-либо служб серверных приложений, но они не работают. Я вошел в систему как root прямо сейчас, так что я могу делать что угодно :) Я проверил порты в Network Utility. 5432 не используется.
Памела Кук - LightBe Corp


2

я выражаю словами, делая это:

dpkg-reconfigure locales

и выберите предпочитаемые регионы

pg_createcluster 9.5 main --start

(9.5 - моя версия postgresql)

/etc/init.d/postgresql start

а потом это слово!

sudo su - postgres
psql

1

Если у вас есть указанная выше проблема, но вы обновились с Yosemite, тогда необходим другой подход, поскольку решение для обновления может уничтожить некоторые файлы. Более подробная информация находится на странице `pg_tblspc`, отсутствующей после установки последней версии OS X (Yosemite или El Capitan) .



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

brew install postgres

Установить сервисы пивоварения

brew tap homebrew/services

Чтобы запустить postgres как фоновую службу

brew services start postgresql

Чтобы остановить postgres вручную

brew services stop postgresql

Мы также можем использовать сервисы brew для перезапуска 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, прежде чем делать это, иначе вы можете навсегда испортить свою базу данных.


1

Для приложения RubyOnRails добавьте localhost Если вы используете собственную версию Postgresql

# config/database.yml
default: &default
  host: localhost

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. На этот раз я получил ошибку отказа в разрешении. Тогда я вспомнил, что мне нужно было не только изменить listen_addresses в plist, но и изменить unit_socket_permissions на 0777. Я также вошел в систему как root, чтобы изменить права доступа к папке var / pgsql_socket, где я мог получить к ней доступ в уровень пользователя. Postgres теперь работает нормально. Я загружаю данные из резервной копии SQL.

Я не понимал, что когда я включил вики, 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.