Can not connect to local PostgreSQL
我设法让我的本地开发环境变得笨拙。
我所有的本地Rails应用程序现在都给出错误:
1 2 3 4 | 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"? |
我不知道是什么导致了这个。
在搜索解决方案时,我更新了所有捆绑的宝石,更新的系统宝石,更新的MacPorts。没有快乐。
其他人在从OSX Leopard升级到Lion时报告了这个问题,因为混淆应该使用哪个版本的Postgres(即OSX版本或MacPorts版本)。我已经在Lion运行了几个月,所以现在这应该发生似乎很奇怪。
如果不先了解问题是什么,我就不愿意过多地捣乱。如何有条不紊地调试?
如何确定我的系统中有多少版本的PostgreSQL,正在访问哪一个版本以及它所在的位置?如果使用错误的PostgreSQL,我该如何解决这个问题?
抱歉没有问题。我还在学习它是如何工作的!谢谢你的任何指示。
编辑
一些更新基于以下建议和评论。
我试图运行
然后我尝试本地化我的pg_hba.conf文件并找到这三个示例文件:
1 2 3 | /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默认和???。
然后我搜索了返回的launchctl启动脚本
1 2 3 4 5 6 7 | 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的内容。
我试图运行
我仍然很困惑如何解决这个问题,并欣赏任何"傻瓜"指针。
谢谢!
EDIT2
这个问题在我遇到daemondo的问题后开始。我的本地Rails应用程序因"找不到daemondo gem"这样的应用程序错误而崩溃。然后,我进行了一系列捆绑更新,宝石更新,端口更新和brew更新,以尝试找到问题。
这个错误可能是daemondo的问题吗?
这看起来像文件权限错误。 Unix域套接字是文件,具有与其他任何用户权限相同的用户权限。看起来似乎尝试访问数据库的OSX用户没有访问套接字文件的文件权限。为了确认这一点,我已经对Ubuntu和psql进行了一些测试,试图生成相同的错误(包含在下面)。
您需要检查套接字文件及其目录
您可以为自己更改目录的权限,但是套接字由
1 2 3 4 | # 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. |
编辑:
我已经在谷歌上进行了快速搜索,您可能希望查看它是否相关。
这可能导致
http://www.postgresqlformac.com/server/howto_edit_postgresql_confi.html
错误消息:
在pg_hba.conf中找不到用户
1 | psql: FATAL: no pg_hba.conf entry FOR host"[local]", USER"couling", DATABASE"main", SSL off |
用户密码验证失败:
1 | psql: FATAL: password authentication failed FOR USER"couling" |
缺少unix套接字文件:
1 2 3 | 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套接字存在,但服务器没有收听它。
1 2 3 | 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套接字文件的文件权限错误:
1 2 3 | 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-thing:前端和后端假定unix-domain套接字的另一个位置(它作为一个集合点)。
清单:
-
postgres是否正在运行:
ps aux | grep postgres | grep -v grep 应该可以解决问题 -
套接字在哪里:
find / -name .s.PGSQL.5432 -ls (套接字曾经在/ tmp;你可以开始在那里看) - 即使您找到(unix-domain)套接字,客户端也可以使用其他位置。 (如果你混合发行版,或者你在某个地方安装了一个发行版并且在其他地方安装了另一个发行版(例如来自源代码),而客户端和服务器使用不同的rendez-vous地址,则会发生这种情况。
如果postgres正在运行,并且套接字实际存在,您可以使用:
-
psql -h /the/directory/where/the/socket/was/found mydbname
(试图连接到unix-domain套接字)
;你现在应该得到psql提示:尝试
尝试:
-
psql -h localhost mydbname 。
(尝试连接到localhost(127.0.0.1)
如果由于授权不足而导致这些尝试失败,则可以更改pg_hba.conf(和SIGHUP或重新启动)在这种情况下:还要检查日志。
一个类似的问题:无法让Postgres开始
注意:如果你可以进入psql提示符,这个问题的快速解决方法就是更改你的
或者您可以尝试添加:
就我而言,
尝试卸载pg gem(
在我的情况下:自制的postgresql安装,更新postgresql,rails等,然后得到这个错误。卸载并重新安装pg gem为我做了这件事。
套接字文件的位置在编译时被烘焙到gem中。因此,您需要重建您的pg gem。
1 2 3 | gem pristine pg # OR bundle EXEC gem pristine pg |
这应解决该特定问题。
如果您遇到类似的错误:
1 2 3 | 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"? |
这可能会成功(它为我做了):
1 | initdb /usr/LOCAL/var/postgres -E utf8 |
如果您不使用OSX / Brew,则指定的目录应该不同。
注意:这不是上面看到的确切错误消息,但此线程是该错误消息的第一个结果。
解决这个错误的原因是在postgres目录中删除了一个名为postmaster.pid的文件。请使用以下链接查看我的问题/答案,了解分步说明。我的问题与文件权限无关:
psql:无法连接到服务器:没有这样的文件或目录(Mac OS X)
回答这个问题的人们放弃了很多游戏,谢谢!我尽我所能
这是我解决该错误消息的方式,部分基于wildplasser的答案。
1 2 | find / -name .s.PGSQL.5432 -ls 2> /dev/NULL => ... /tmp/.s.PGSQL.5432 |
所以,有我的套接字或其他什么,但客户端寻找它:
1 | /var/run/postgresql/.s.PGSQL.5432 |
所以简单地创建一个到
1 | sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 |
希望这对任何人都有帮助。这似乎有点不对,但嘿,它的确有效!
我升级到新的postgres后开始得到这个 - 我没有意识到我已经保存了数据文件。
首先,我尝试启动postgres服务器:
1 | postgres -D /usr/LOCAL/var/postgres |
这就是我看到这个错误的方式
1 2 | 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
这就是修复它的原因
1 2 | mv /usr/LOCAL/var/postgres /usr/LOCAL/var/postgres.old initdb -D /usr/LOCAL/var/postgres |
我得到了同样的错误(事实证明这是一个错误
1 2 | $ rm /usr/LOCAL/var/postgres/postmaster.pid $ pg_resetxlog -f /usr/LOCAL/var/postgres |
刚刚确认我在PSQL和Django上有类似的问题,
看起来是因为我的psql服务器没有正确关闭,postmaster.pid文件仍然存在(应该在正确关闭时自动删除)在我的postgres文件夹中。
删除了这一切,一切都很好
尝试使用带有rails的postgresql时遇到了类似的问题。更新我的Gemfile以使用新版本的gem pg为我解决了这个问题。 (gem pg version 0.16.0有效)。在Gemfile中使用:
1 | gem 'pg', '0.16.0' |
然后运行以下命令来更新gem
1 2 3 | bundle install --without production bundle UPDATE bundle install |
1
2
3 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"?
我搜索解决方案一段时间了。所以,这个问题也解决了我的问题(reinit db):
1 2 3 | 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。
我读了很多关于这个错误的主题,我的解决方案是简单地重启postgres:
1 | sudo service postgresql restart |
这里没有提到。
在我的Macbook电池耗尽之后,今天发生了这种情况。我认为这可能是因为关机不当造成的。在我这样的情况下你所要做的就是删除postmaster.pid
导航到该文件夹
1 | cd /usr/LOCAL/var/postgres |
检查postmaster.pid是否存在
1 | ls |
删除postmaster.pid
1 | rm postmaster.pid |
就我而言,以前的解决方案都不好。您可以在Rails配置文件中使用TCP
1 2 3 4 5 6 | ... adapter: postgresql encoding: unicode pool: 5 host: localhost port: 5432 |
这解决了我的问题:)
在我使用此修复之前:
1 2 | sudo mkdir /var/run/postgresql sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432 |
但每次重启后
当我使用Django设置Posgtres时出现此错误,我正在使用Back Track并且它安装了Postgres。我认为设置是问题。我通过完全删除它然后重新安装来修复它。
1 2 | sudo apt-GET remove postgresql sudo apt-GET purge postgresql |
现在运行:
1 | apt-GET --purge remove postgresql\* |
从您的系统中删除PostgreSQL的所有内容。仅仅清除postgres包是不够的,因为它只是一个空元数据包。
删除所有PostgreSQL包后,运行:
1 2 3 4 5 | rm -r /etc/postgresql/ rm -r /etc/postgresql-common/ rm -r /var/lib/postgresql/ userdel -r postgres groupdel postgres |
你现在应该能够:
1 | apt-GET install postgresql |
MacOSX在这里。使用自制程序将postresql安装从9.1之前的版本升级到9.1.2后,我遇到了同样的问题。 (顺便说一句,记住在使用pg_dump升级之前转储数据库,9.1之前的数据库是不兼容的。)同样的问题,相同的错误消息。
卸载pg gem对我来说很有用。我实际上不得不做一些跳舞来发现这个问题。首先,我做了一个全球宝石卸载,清除所有旧宝石的甲板(有几个)。然后我从我的Gemfile中删除了pg,重新绑定,恢复了pg引用,并再次反弹。
在那之后,它就像一个魅力。
你好世界:)对我来说最好但最奇怪的方法就是做下一件事。
1)下载postgres93.app或其他版本。将此应用添加到/ Applications /文件夹中。
2)在文件
1 | export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH |
它是从
3)从
4)经过所有这些操作后,我很高兴运行
5)此外,如果您想以图形方式查看数据库,则应安装
当然,它仅对本地服务器有用。如果这些指示可以帮助那些面临这个问题的人,我将很高兴。
1 | gem uninstall pg |
在OS X上使用Homebrew:
1 | gem install pg -- --with-pg-config=/usr/local/bin/pg_config |
我有这个问题困扰着我,经过进一步调查(运行
修复:
来源:https://stackoverflow.com/a/17420624/2577622
我尝试了解决这个问题的大多数解决方案,但无法解决问题。
我运行
当我运行