无法连接到本地PostgreSQL
我设法让我的本地开发环境。
我所有的本地Rails应用程序现在都出现错误:
PGError could not connect to server: Permission denied Is the server running locally and accepting connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"? 我不知道是什么原因造成的。
在search解决scheme时,我更新了所有捆绑的gem,更新的系统gem,更新的MacPorts。 没有快乐。
其他人在从OSX Leopard升级到Lion时报告了这个问题,因为混淆了Postgres应该使用的版本(即OSX版本或MacPorts版本)。 我已经运行了好几个月的Lion,所以现在看来这似乎很奇怪。
如果没有先了解问题是什么,我不愿意惹得太多。 我怎样才能有条不紊地进行debugging?
我怎样才能确定我的系统上有多less个PostgreSQL版本,正在访问哪一个版本,以及它的位置? 如果错误的PostgreSQL被使用,我该如何解决这个问题?
对不起noob问题。 我仍然在学习如何工作! 感谢任何指针。
编辑
根据以下build议和意见进行一些更新。
 我试图运行pg_lsclusters返回一个command not found错误。 
然后,我试图本地化我的pg_hba.conf文件,发现这三个示例文件:
 /opt/local/share/postgresql84/pg_hba.conf.sample /opt/local/var/macports/software/postgresql84/8.4.7_0/opt/local/share/postgresql84/pg_hba.conf.sample /usr/share/postgresql/pg_hba.conf.sample 
所以我假设安装了3个PSQL版本? Macports,OSX默认和???。
 然后,我search了launchctl启动脚本ps -ef | grep postgres  ps -ef | grep postgres返回 
 0 56 1 0 11:41AM ?? 0:00.02 /opt/local/bin/daemondo --label=postgresql84-server --start-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper start ; --stop-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper stop ; --restart-cmd /opt/local/etc/LaunchDaemons/org.macports.postgresql84-server/postgresql84-server.wrapper restart ; --pid=none 500 372 1 0 11:42AM ?? 0:00.17 /opt/local/lib/postgresql84/bin/postgres -D /opt/local/var/db/postgresql84/defaultdb 500 766 372 0 11:43AM ?? 0:00.37 postgres: writer process 500 767 372 0 11:43AM ?? 0:00.24 postgres: wal writer process 500 768 372 0 11:43AM ?? 0:00.16 postgres: autovacuum launcher process 500 769 372 0 11:43AM ?? 0:00.08 postgres: stats collector process 501 4497 1016 0 12:36PM ttys000 0:00.00 grep postgres 
我已经在http://pastebin.com/Gj5TpP62上发布了postgresql84-server.wrapper的内容。
 我试图运行port load postgresql184-server但收到错误Error: Port postgresql184-server not found 。 
我仍然很困惑如何解决这个问题,并欣赏任何“傻瓜”指针。
谢谢!
EDIT2
这个问题是在daemondo出现问题之后才开始的。 我的本地Rails应用程序崩溃了“无法finddaemondo gem”的应用程序错误。 然后,我经历了一系列软件包更新,gem更新,端口更新和brew更新以尝试find问题。
这个错误可能是daemondo的问题吗?
这看起来像一个文件权限错误。 Unix域套接字是文件,拥有与其他任何用户相同的权限。 它看起来好像试图访问数据库的OSX用户没有文件权限来访问套接字文件。 为了证实这一点,我已经在Ubuntu和psql上做了一些testing,试图产生相同的错误(包含在下面)。
 您需要检查套接字文件及其目录/var和/var/pgsql_socket 。 您的Rails应用程序(OSX用户)必须对这些目录具有执行(x)权限(最好授予所有人权限),并且套接字应具有完全权限(wrx)。 您可以使用ls -lAd <file>来检查这些ls -lAd <file> ,如果它们中的任何一个是符号链接,您需要检查链接指向的文件或目录。 
 您可以自己更改目录上的权限,但套接字是由postgresql.conf中的postgresql.confconfiguration的。 这可以在与pg_hba.conf相同的目录中find(你必须找出哪一个)。 一旦你设置了权限,你将需要重新启动postgresql。 
 # postgresql.conf should contain... unix_socket_directory = '/var/run/postgresql' # dont worry if yours is different #unix_socket_group = '' # default is fine here #unix_socket_permissions = 0777 # check this one and uncomment if necessary. 
编辑:
 我已经做了一个快速search谷歌,你可能希望看看是否是相对的。 这可能会导致任何尝试find您的configuration文件失败。 
http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
错误消息:
在pg_hba.conf中找不到用户
 psql: FATAL: no pg_hba.conf entry for host "[local]", user "couling", database "main", SSL off 
用户失败的密码auth:
 psql: FATAL: password authentication failed for user "couling" 
缺lessunix套接字文件:
 psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 
Unix套接字存在,但服务器不听它。
 psql: could not connect to server: Connection refused Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 
unix套接字文件上的文件权限不正确 :
 psql: could not connect to server: Permission denied Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 
我的直觉是,这又是一个mac / OSX事物:前端和后端为unix域套接字(作为集合点起作用)承担不同的位置。
清单:
-  是postgres运行: ps aux | grep postgres | grep -v grepps aux | grep postgres | grep -v grepps aux | grep postgres | grep -v grep应该做的伎俩
-  这个套接字位于哪里: find / -name .s.PGSQL.5432 -ls(这个套接字曾经在/ tmp中;你可以开始在那里查看)
- 即使您find(unix域)套接字,客户端也可以使用其他位置。 (如果你混合使用发行版,或者你的发行版安装在某个地方,而另一个地方安装了另一个发行版(如源)),客户端和服务器使用不同的rendez-vous地址, 则会发生这种情况 。
如果postgres正在运行,并且套接字实际存在,则可以使用:
-  psql -h /the/directory/where/the/socket/was/found mydbname
(它试图连接到unix域套接字)
  ; 你现在应该得到psql提示:尝试\d然后\q退出。 你也可以尝试: 
-   psql -h localhost mydbname。
(它试图连接到本地主机(127.0.0.1)
如果这些尝试因授权不足而失败,则可以更改pg_hba.conf(和SIGHUP或重新启动)在这种情况下:也请检查日志。
一个类似的问题: 无法让Postgres开始
 注意:如果你能进入psql提示符,这个问题的快速解决方法就是改变你的config/database.yml ,添加: 
 host: localhost 
或者你可以尝试添加:
 host: /the/directory/where/the/socket/was/found 
 在我的情况下, host: /tmp 
 尝试卸载pg gem( gem uninstall pg ),然后重新安装 – 如果使用bundler,然后bundle install ,否则gem install pg 。 另外,请确保pathselect正确的版本:Lion有一个posgresql版本(以前的版本没有),它可能在你本地安装的版本(如MacPorts,自制软件)之前的path。 
在我的情况下:自制安装postgresql,更新postgresql,导轨等,然后得到这个错误。 卸载并重新安装pg gem为我做了。
套接字文件的位置在编译时被烧入gem。 因此你需要重build你的PGgem。
 gem pristine pg # or bundle exec gem pristine pg 
这应该解决这个特定的问题。
如果您收到类似的错误:
 psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? 
这可能会诀窍(它为我做的):
 initdb /usr/local/var/postgres -E utf8 
如果您不使用OSX / Brew,指定的目录应该不同。
注意:这不是上面看到的确切的错误消息,但此线程是该错误消息的第一个结果。
什么解决这个错误,我是在postgres目录中删除一个名为postmaster.pid的文件。 请使用以下链接查看我的问题/答案,以获得一步一步的指导。 我的问题与文件权限无关:
psql:无法连接到服务器:没有这样的文件或目录(Mac OS X)
回答这个问题的人虽然掉了很多游戏,谢谢! 我提高了所有我能
这就是我如何解决这个错误信息,部分基于wildplasser的答案。
 find / -name .s.PGSQL.5432 -ls 2> /dev/null => ... /tmp/.s.PGSQL.5432 
所以,有我的套接字或任何东西,但客户端在:
 /var/run/postgresql/.s.PGSQL.5432 
 所以很简单的做一个到/tmp/.s.PGSQL.5432的符号链接: 
 sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 
希望这有助于任何人。 似乎有点错,但嘿,它的作品!
升级到新的postgres后,我开始得到这个 – 我没有意识到我拥有数据文件。
首先我试图启动postgres服务器:
 postgres -D /usr/local/var/postgres 
这是我看到这个错误
 FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version 9.0, which is not compatible with this version 9.3.5. 
所以然后我发现这个答案在SO – 有关不兼容性错误: https : //serverfault.com/questions/342626/how-do-i-upgrade-postgresl-database-incompatibility-error
这是固定的
 mv /usr/local/var/postgres /usr/local/var/postgres.old initdb -D /usr/local/var/postgres 
只是确认我在PSQL和Django上有类似的问题,
看起来像是因为我的psql服务器没有正确closures,postmaster.pid文件仍然存在(应该在自动closures时自动删除)在我的postgres文件夹中。
删除这一切都好
 我得到了这个相同的错误(事实certificate,这是postmaster.pid错误。这是我得到postgres和再次运行( 信贷给里卡多Burillo的修复 ): 
 $ rm /usr/local/var/postgres/postmaster.pid $ pg_resetxlog -f /usr/local/var/postgres 
尝试使用rails的postgresql时,我有类似的问题。 更新我的Gemfile以使用新版本的gem pg为我解决这个问题。 (gem版本0.16.0的作品)。 在Gemfile中使用:
 gem 'pg', '0.16.0' 
然后运行以下更新gem
 bundle install --without production bundle update bundle install 
我的Macbook电池耗尽后,今天发生在我身上。 我认为这可能是由于不正确的关机造成的。 所有你需要做的事情,如我的是删除postmaster.pid
导航到该文件夹
 cd /usr/local/var/postgres 
检查postmaster.pid是否存在
 ls 
删除postmaster.pid
 rm postmaster.pid 
 在我的情况下,以前的解决scheme都不是很好。 而不是使用套接字,您可以在Railsconfiguration文件中使用TCP host + port号。 所以在database.yml文件中只需添加两行,如下所示: 
 ... adapter: postgresql encoding: unicode pool: 5 host: localhost port: 5432 
这解决了我的问题:)
在我使用这个修复之前:
 sudo mkdir /var/run/postgresql sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 
 但每次重新启动/tmp/.s.PGSQL.5432后,我不得不重复这些命令。 解决scheme的作品,但它是可怕的,所以更好的只是修改Rails数据库configuration文件:) 
我读了很多关于这个错误的主题,对我来说解决scheme是简单地重新启动postgres:
 sudo service postgresql restart 
这里没有提到。
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"?
我search一下解决scheme。 所以,这个也解决了我的问题(reinit db):
 rm -r /usr/local/var/postgres initdb /usr/local/var/postgres -E utf8 pg_ctl -D /usr/local/var/postgres -l logfile start 
我使用OS X 10.11.3和brew。
MacOSX在这里。 使用自制软件将我的postresql安装从9.1之前版本升级到9.1.2之后,我遇到了同样的问题。 (顺便提一下,请记住在升级之前使用pg_dump来转储数据库,9.1之前的数据库是不兼容的。)同样的问题,相同的错误消息。
卸载pg gem为我做了诀窍。 其实我不得不做很多跳舞来发现这个问题。 首先,我做了一个全球性的gem卸载,清除所有的旧gem甲板(有几个)。 然后我从我的Gemfile中删除了pg,重新绑定了,恢复了pg的引用,并且再次反弹了。
之后,它就像一个魅力。
 你好,世界 :) 
  对我来说,最好但奇怪的做法是做下一件事。 
1)下载postgres93.app或其他版本。 将此应用程序添加到/ Applications /文件夹。
  2)将一行(命令)添加到文件.bash_profile (位于我的主目录中): 
export PATH = / Applications / Postgres93.app / Contents / MacOS / bin /:$ PATH
 这是来自Postgres93.app psql的path。 每次启动控制台时,该行(命令)都会运行。 
  3)从/Applications/文件夹启动Postgres93.app 。 它启动一个本地服务器(端口是“5432”,主机是“localhost”)。 
  4)所有这些操作后,我很高兴运行$ createuser -SRDP user_name和其他命令,并看到它的工作!  Postgres93.app可以在每次系统启动时运行。 
  5)另外,如果你想看到你的数据库graphics你应该安装PG Commander.app 。 将postgres数据库视为漂亮的数据表是一种很好的方法 
当然,这只对本地服务器有帮助。 如果这个指示帮助那些面对这个问题的人,我会很高兴。
当我使用Django设置Posgtres时出现了这个错误,我使用Back Track,并且安装了Postgres。 我认为设置是问题。 我通过完全删除它,然后像这样重新安装。
 sudo apt-get remove postgresql sudo apt-get purge postgresql 
现在运行:
 apt-get --purge remove postgresql\* 
从你的系统中删除所有的PostgreSQL。 只是清除postgres包是不够的,因为它只是一个空的元包。
一旦所有的PostgreSQL包已经被删除,运行:
 rm -r /etc/postgresql/ rm -r /etc/postgresql-common/ rm -r /var/lib/postgresql/ userdel -r postgres groupdel postgres 
你现在应该能够:
 apt-get install postgresql 
 我有这个问题困扰着我,并进一步调查(运行rake db:setup ),我看到rails试图连接到以前使用的postgres实例 – 一个存储在envvariables作为DATABASE_URL。 
 修复: unset DATABASE_URL 
来源: https : //stackoverflow.com/a/17420624/2577622
我尝试了解决这个问题的大部分解决scheme,但无法工作。
 我跑了lsof -P | grep ':5432' | awk '{print $2}' lsof -P | grep ':5432' | awk '{print $2}'  lsof -P | grep ':5432' | awk '{print $2}'显示正在运行的进程的PID。 但是我不能用kill -9 <pid>杀死它。 
 当我运行pkill postgresql ,进程终于停止了。 希望这可以帮助。 
 gem uninstall pg 
在OS X上用自制软件:
 gem install pg -- --with-pg-config=/usr/local/bin/pg_config