Socket File "/var/pgsql_socket/.s.PGSQL.5432" Отсутствует в горном льве (OS X Server)
Я только что обновил свой сервер 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 Support (без соглашения), и мне сказали, что моя проблема должна быть решена разработчиками, которые будут использовать 695 долларов.
У меня есть веб-сайт, который сейчас работает, потому что я не могу его перестроить. Я не знаю, куда обратиться за помощью в этот момент. Я продолжу поиск в Интернете, чтобы узнать, могу ли я что-нибудь найти. Однако я надеюсь, что кто-то может дать мне ответ быстро, чтобы я мог восстановить мою базу данных.
Обновление: 12/13/2012 15:33 GMT-6
Вот мой вывод для ps awwwwx | 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
Обновление: 12/13/2012 18:10 GMT-6
После интенсивного поиска в Интернете это видео было найдено. Я смог заставить PostgreSQL работать и удалить ошибку. Я могу подключиться с помощью pgadmin и phppgadmin. Я собирался вернуться на Lion Server из-за явного разочарования. Теперь мне не придется.
http://www.youtube.com/watch?v=y1c7WFMMkZ4
Ответы
Ответ 1
Мне удалось добавить следующее в мой .bash_profile, чтобы предотвратить ошибку:
export PGHOST=localhost
Это работает потому что:
Если вы опустите имя хоста, psql будет подключаться через сокет Unix-домена к серверу на локальном хосте или через TCP/IP в localhost на компьютерах, у которых нет сокетов Unix-домена.
Ваша ОС поддерживает сокеты домена Unix, но сокет PostgreSQL Unix, который psql
нуждается либо не существует, либо находится в другом месте, чем он ожидает.
Указание имени хоста явно как localhost
заставляет psql
использовать TCP/IP. Установка переменной окружения PGHOST
является одним из способов ее достижения. Это описано в руководстве psql.
Ответ 2
Попробуйте вставить в консоли следующее:
$ mkdir /var/pgsql_socket/
$ ln -s /private/tmp/.s.PGSQL.5432 /var/pgsql_socket/
Ответ 3
Я смог решить, просто заполнив 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': '',
}
}
Ответ 4
Откройте 'postgresql.conf' в вашем любимом редакторе. Ищите переменную 'unix_socket_directories', она, скорее всего, будет выглядеть так:
unix_socket_directories = '/private/tmp/'
Измените строку следующим образом:
unix_socket_directories = '/var/pgsql_socket/'
Обратите внимание, если вы хотите, чтобы файлы сокетов в нескольких каталогах разделяли их.
Ответ 5
Как упоминалось другими в комментариях, очень простым решением этой проблемы является объявление базы данных "хост" в конфигурации базы данных. Добавляя этот ответ, просто сделайте его более понятным для тех, кто читает это.
В приложении Ruby on Rails, например, отредактируйте /config/database.yml:
development:
adapter: postgresql
encoding: unicode
database: database_name
pool: 5
host: localhost
Примечание: последняя строка добавлена для указания хоста. До обновления до Yosemite мне никогда не нужно было указывать хост таким образом.
Надеюсь, это поможет кому-то.
Приветствия
Ответ 6
Более простое решение (благодаря http://daniel.fone.net.nz/blog/2014/12/01/fixing-connection-errors-after-upgrading-postgres/). Я обновился до 9.9. В моем случае все, что мне нужно было сделать (после дня поиска в Интернете и без успеха)
gem uninstall pg
gem uninstall activerecord-postgresql-adapter
bundle install
Перезапустите webrick и сделайте!
Ответ 7
Проверьте состояние базы данных:
service postgresql status
Если база данных не запущена, запустите db:
sudo service postgresql start
Ответ 8
Вы можете проверить свой файл postgresql.conf?
В каком порту запущены ваши postgres?
Я думаю, что он не работает на порту 5432. Если не изменить его на 5432
ИЛИ при использовании терминала
psql -U postgres -p YOUR_PORT_NUMBER database_name
Ответ 9
У меня была эта проблема с Django.
Исправьте его, явно указав свое имя хоста на "localhost".
Ответ 10
Я делаю слово, делая это:
dpkg-reconfigure locales
и выберите предпочтительные локали
pg_createcluster 9.5 main --start
(9.5 - это моя версия postgresql)
/etc/init.d/postgresql start
а затем это слово!
sudo su - postgres
psql
Ответ 11
Если у вас есть вышеуказанная проблема, но вы обновили ее из Yosemite, тогда нужен другой подход, так как решение для обновления может уничтожить некоторые файлы. Более подробная информация находится на ` pg_tblspc`, отсутствующем после установки последней версии OS X (Yosemite или El Capitan).
Ответ 12
apt-get install postgres-xc-client
apt-get install postgres-xc
Ответ 13
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 услуги
brew tap homebrew/services
Чтобы запустить postgres в качестве фоновой службы
brew services start postgresql
Чтобы остановить postgres вручную
brew services stop postgresql
Мы также можем использовать службы brew для перезапуска Postgres
brew services restart postgresql
Ответ 14
проверьте, работает ли сервер postgres с помощью следующего кода
sudo service postgresql status
если сервер postgres неактивен, напишите следующую команду.
sudo service postgresql start
Ответ 15
Мне потребовалось некоторое время, но я смог получить эту работу, наконец, после того, как вы предложили предлагаемые предложения и проверили дополнительные веб-поиски. Я использовал информацию в следующем видео YouTube, созданном Mactasia:
http://www.youtube.com/watch?v=y1c7WFMMkZ4
Когда я это сделал, я увидел файл с .lock в качестве расширения. Однако я все еще получил ошибку, когда попытался запустить Rails-сервер, когда я возобновил работу над своим Rails-приложением, используя PostgreSQL. На этот раз я получил отказ в разрешении. Это когда я вспомнил, что не только мне пришлось менять listen_addresses в plist, но мне также пришлось менять unit_socket_permissions на 0777. Я также вошел в систему под именем root, чтобы изменить разрешения в папке var/pgsql_socket, где я мог бы получить к нему доступ пользовательский уровень. Теперь Postgres отлично работает. Я нахожусь в процессе перезагрузки моих данных из моей резервной копии SQL.
То, что я не понимал, было то, что когда у меня была wiki, включенная PostgreSQL, предположительно работала, когда я делал postgres fullstatus sudo serveradmin, но у меня все еще была ошибка. О, хорошо.
Ответ 16
Разрешения для файлов ограничены в базе данных Postgres, принадлежащей Mac OS. Эти разрешения являются reset после перезагрузки или перезапуска Postgres: например. serveradmin запускает postgres.
Итак, временно reset разрешения или права собственности:
sudo chmod o+rwx /var/pgsql_socket/.s.PGSQL.5432
sudo chown "webUser" /var/pgsql_socket/.s.PGSQL.5432
Сброс разрешений не является безопасным, поэтому установите версию db, которую вы имеете для решения.
Ответ 17
Сначала удалите установленные 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
Ответ 18
Я только что создал новый кластер и работал у меня, я использовал (PostgreSQL) 9.3.20:
sudo pg_createcluster 9.3 main --start
Ответ 19
Я получил эту ошибку после того, как мой компьютер завис и перезагрузился самостоятельно. Решение для меня не было найдено на этой странице, скорее, на другом вопросе с очень высокой оценкой SO с той же ошибкой psql: не удалось подключиться к серверу: нет такого файла или каталога (Mac OS X). Ответ: просто удалите этот файл /usr/local/var/postgres/postmaster.pid
, затем brew services restart postgresql
сделал brew services restart postgresql
дело. Обратите внимание на предупреждение в ответе об уничтожении процессов postgres, прежде чем делать это, иначе вы можете навсегда испортить свою базу данных.