Недавно я обновил мой компьютер с Mac OS X Lion (10.7.4) до Mountain Lion (10.8), и я думаю, что он помешал моей установке PostgreSQL. Первоначально он был установлен через Homebrew. Я не администратор баз данных, но надеюсь, что кто-нибудь подскажет мне, как это устранить.
Я не могу подключиться (но смог раньше, чем пред-Горный Лев):
$ psql -U rails -d myapp_development
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 все еще явно работает:
$ ps aux | grep postgres
meltemi 2010 0.0 0.0 2444124 5292 ?? Ss Wed01PM 0:00.02 postgres: rails myapp_development [local] idle
meltemi 562 0.0 0.0 2439312 592 ?? Ss Wed12PM 0:02.28 postgres: stats collector process
meltemi 561 0.0 0.0 2443228 1832 ?? Ss Wed12PM 0:01.57 postgres: autovacuum launcher process
meltemi 560 0.0 0.0 2443096 596 ?? Ss Wed12PM 0:02.89 postgres: wal writer process
meltemi 559 0.0 0.0 2443096 1072 ?? Ss Wed12PM 0:04.01 postgres: writer process
meltemi 466 0.0 0.0 2443096 3728 ?? S Wed12PM 0:00.85 /usr/local/bin/postgres -D /usr/local/varpostgres -r /usr/local/var/postgres/server.log
И он отвечает на запросы (как тестовой базы данных, так и базы разработки) из локального приложения Rails
User Load (0.2ms) SELECT "users".* FROM "users"
Rendered users/index.html.haml within layouts/application (1.3ms)
Кажется, что нет никакого /var/pgsql_socket/
каталога, не говоря уже о /var/pgsql_socket/.s.PGSQL.5432
файле сокета, упомянутом выше!?! Может быть, установка Mountain Lion уничтожила это?
$ ls -l /var/ | grep pg
drwxr-x--- 2 _postgres _postgres 68 Jun 20 16:39 pgsql_socket_alt
Как я могу устранить это?
postgresql
psql
mac-os-x
Мельтеми
источник
источник
/usr/local/var/postgres/server.log
?$PATH
изменения с обновлением/usr/bin
впереди,/usr/local/bin
и я думаю, что Mountain Lion может прийти с предустановленным PostgreSQL!?! Расследование ...Ответы:
Я обнаружил, что у меня была чрезвычайно похожая проблема, а именно, что postgres открывал сокет, в
/var/pgsql_socket_alt
который не должно было смотреть ни одно из моих программ, но решение моей проблемы было не только проблемой с моим$PATH
.Я должен был создать каталог
/var/pgsql_socket
, Чаун его к себе, и множествоunix_socket_directory
вpostgresql.conf
(расположен в/usr/local/var/postgres
) в этот каталог, а затем использоватьpg_ctl
бинарный файл в ,/usr/local/bin
чтобы начать правильный сервер Postgres успешно (что, где$PATH
приходит - убедиться ,which pg_ctl
ПОСТАНОВЛЯЕТ/usr/local/bin/pg_ctl
, или просто всегда назовите это явно).Это может помочь другим пользователям, которые найдут этот вопрос через
/var/pgsql_socket_alt
упоминание.источник
$PATH
как я это сделал.Правдоподобным и типичным объяснением было бы то, что то,
psql
что идет с homebrew,/usr/local/bin/psql
отличается от того, которое будет в вашем $ PATH, например/usr/bin/psql
(в комплекте с OS X). Вы можете попробовать с полным путем:$ /usr/local/bin/psql -U rails -d myapp_development
Кроме того, в
ps
выводе вашего вопроса есть что-то довольно необычное : сервер postgres работает подmeltemi
пользователем Unix, тогда как обычно для этого используется выделенныйpostgres
пользователь Unix.источник
_postgres
(с подчеркиванием) для пользователя / группы мне неизвестно. Это артефакт или ожидается?$PATH
проблему, как вы заявили. Вещи работают как прежде, когда я использую/usr/local/bin/psql
для доступа к базе данных. Либо у Lion не было системы PostgreSQL, либо мой $ PATH был настроен по-другому. Прошёл год с тех пор, как я в последний раз запутался в этом, поэтому точно не помню. Что касается пользователя Unix ... при установке Homegrew PostgreSQL сервер запускается с помощью launchd, и пользователь по умолчанию настроен на локального пользователя, который его установил. Все настроено по-другому на Mac OS X Server, который автоматически запускает PostgreSQLpostgres
.Я не знаю ни одного файла конфигурации для клиента PSQL. Однако psql учитывает ряд переменных окружения, которые соответствуют параметрам командной строки.
Таким образом, чтобы psql автоматически использовал сокет по вашему выбору, вы можете установить переменную PGHOST в каталог, содержащий сокет. т.е.
источник
Пытаться:
или
источник
Поздно, но я нашел это полезным: http://tammersaleh.com/posts/install-postgresql-for-rails-3-1-on-lion
Это было для Lion, но у меня были те же проблемы, что и в этой теме, после обновления с 10.6.8 до Mountain Lion и установки PostgreSQL через HomeBrew до 10.6.8. У меня также была таинственная
/var/pgsql_socket_alt
папка после обновления, но я просто удалил ее и создал/var/pgsql_socket
в соответствии с предложением @wolftron. Однако это не было окончательным решением.Если я оставлю
unix_socket_directory
пустым / закомментированный вpostgresql.conf
, любые проекты, существующие до обновления, будут жаловаться на отсутствие сокета/var/pgsql_socket
. Но если бы я изменил conf и был жестко запрограммированvar/pgsql_socket
, любые новые проекты жаловались бы на отсутствие сокета/tmp
. Очень расстраивает ... пока я не переустановилpg gem
проект до 10.8 (gem uninstall pg && gem install pg
) и не оставилunix_socket_directory
комментарий вconf
файле. После быстройpg_ctl
перезагрузки сервера работали как новые, так и старые проекты. Мой сокет pgsql живет/tmp
сейчас, между прочим.Sidenote: если вы используете
activerecord-postgresql-adapter
gem, сначала удалите его, затем переустановите pg, затем установитеactiverecord-postgresql-adapter
снова.источник
Я только что подписался на dba SE, так что, похоже, я не могу комментировать соответствующий пост (что за чудо!).
Однако я был уверен, что был в той же лодке, что и @thure. Я удостоверился, что / usr / local / bin был раньше в моем PATH, чем / usr / bin, проверил, какие двоичные файлы оболочка хэшировала,
which
иtype
т. Д.Я видел те же симптомы, что и @thure. Тогда у меня было прозрение; Я понял, что перестроил
pg
гем (я использую Ruby) в оболочке, на PATH которой негативно повлиял path_helper для Mac (которая запускается из / etc / profile и помещает / usr / bin перед / usr / local / bin) ,Я удалил pg и переустановил его в оболочке, путь которой был правильным. Внезапно я смог подключиться!
Поэтому убедитесь, что вы перекомпилируете людей с языковыми привязками и дайте им найти правильную копию (предположительно)
pg_config
.источник
Я нашел этот ответ: https://stackoverflow.com/questions/10763143/in-rails-couldnt-create-database-for-adapter-postgresql И, так же просто , как это было, он работал для меня ... побежал
$bundle update
и это снова заработало.источник
Я обнаружил, что символическое связывание действительного местоположения с ожидаемым местоположением работает просто отлично:
в соответствии с принятым ответом @thure, но проще.
источник
Вот и наступил 2016 год, El Capitan вышел, и Apple продолжает что-то менять. Postgres устанавливается как часть операционной системы, а файл конфигурации postgres устанавливает свойство unix_socket_directories в postgresql.conf равным / tmp. Сокет находится в /tmp/.s.PGSQL.5432. Я смог обойти проблему, выполнив следующее:
Надеюсь, это кому-нибудь поможет.
источник
Ищите правильный файл сокета
Из результата получите путь к файлу и используйте путь с параметром "-h" в команде psql
Например, вот как я подключаюсь к базе данных календаря и контактов сервера macOS (в рамках ssh-сессии с сервером):
Затем файл сокета в пути будет использоваться для подключения.
источник
По умолчанию postgres пытается подключиться через unix-domain-sockets. UNIX ДОМЕННАЯ РОЗЕТКА
Это случилось со мной, когда я запускал экземпляр postgres на докере. Вы должны увидеть, какое соединение принимает ваш сервер. Для меня это был явно TCP, а не сокет домена unix.
Добавление флага для принятия хоста перенаправило соединение на правильный путь и устранило проблему.
PS: доменные сокеты Unix работают на уровне ядра, и соединение не должно проходить через весь джаз, необходимый для соединений TCP. Они довольно быстрые и эффективные, если вы хотите подключиться к своей машине из другого процесса в рамках межпроцессного взаимодействия.
источник
Привет, мир :)
Лучший, но странный способ для меня - делать следующие вещи.
1) Загрузите postgres93.app или другую версию. Добавьте это приложение в папку / Applications /.
2) Добавить строку (команду) в файл
Это путь к.bash_profile
(который находится в моем домашнем каталоге):psql
отPostgres93.app
. Строка (команда) запускается каждый раз при запуске консоли.3) Запустить
Postgres93.app
из/Applications/
папки. Он запускает локальный сервер (порт «5432», а хост «localhost»).4) После всех этих манипуляций я был рад запустить
$ createuser -SRDP user_name
и другие команды и убедиться, что это сработало!Postgres93.app
можно заставить работать каждый раз, когда ваша система запускается.5) Также, если вы хотите увидеть свои базы данных в графическом виде, вы должны установить
PG Commander.app
. Это хороший способ увидеть вашу базу данных postgres как красивые таблицы данныхКонечно, это полезно только для локального сервера. Я буду рад, если эта инструкция поможет другим, кто столкнулся с этой проблемой.
источник
Я не могу быстро найти ссылку, где я нашел этот самородок, но он работал для меня.
экспорт PGHOST = localhost
О, вот ссылка. https://stackoverflow.com/questions/13868730/socket-file-var-pgsql-socket-s-pgsql-5432-missing-in-mountain-lion-os-x-ser
источник
Я получил эту же ошибку при попытке запустить
psql
в командной строке. Оказалось, что мое решение было намного проще. Я неправильно настроил порт прослушивания в файле конфигурации: /etc/postgresql/9.4/main/postgres.conf . Я изменил порт с порта = 5432 на порт = 5433. Когда я изменил его обратно на 5432, он работал как ожидалось.Чтобы проверить, сделали ли вы что-то подобное, вы можете запустить
$ psql -p5433
Есть несколько полезных опций, подобных этой, для команды psql, которые вы можете найти здесь: http://www.postgresql.org/docs/9.4/static/app-psql .html, чтобы вы могли проверить свою СОБСТВЕННУЮ неверную конфигурацию. Конечно, вы можете просто удалить свой последний набор изменений конфигурации из файлов * .conf, чтобы проверить, не являются ли они источником вашей проблемы. Я думаю, что, безусловно, стоит проверить, прежде чем копаться в правах доступа к файлам и владельцам. (Только не забудьте/etc/init.d/postgresql restart
)Чего я НЕ смог найти, так это файла конфигурации, который устанавливает значения по умолчанию для команды CLI psql. Кто-нибудь может прокомментировать это, пожалуйста?
Для меня я всегда возвращаюсь к своему первому принципу программирования: «Я обычно являюсь источником любой данной ошибки!»
источник