我设法让我的本地开发环境变得很糟糕。
我所有的本地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"?
我不知道是什么造成的。
在搜索解决方案时,我更新了所有捆绑的宝石,更新了系统宝石,更新了MacPorts。没有快乐。
其他人在从OSX Leopard升级到Lion时报告了这个问题,因为混淆应该使用哪个版本的Postgres(即OSX版本或MacPorts版本)。我已经运行Lion好几个月了,所以现在这应该发生似乎很奇怪。
如果不先了解问题是什么,我就不愿意过多地捣乱。如何有条不紊地调试?
如何确定我的系统中有多少版本的PostgreSQL,正在访问哪一个版本以及它所在的位置?如果使用错误的PostgreSQL,我该如何解决这个问题?
对于noob问题抱歉。我还在学习它是如何工作的!谢谢你的任何指示。
编辑
根据以下建议和评论进行一些更新。
我尝试运行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默认和???。
然后我搜索了返回
的launchctl启动脚本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应用程序因“找不到daemondo gem”这样的应用程序错误而崩溃。然后,我进行了一系列捆绑更新,宝石更新,端口更新和brew更新,以尝试找到问题。
这个错误可能是daemondo的问题吗?
答案 0 :(得分:64)
这看起来像文件权限错误。 Unix域套接字是文件,具有与其他任何用户权限相同的用户权限。看起来似乎尝试访问数据库的OSX用户没有访问套接字文件的文件权限。为了确认这一点,我已经对Ubuntu和psql进行了一些测试,试图产生相同的错误(包含在下面)。
您需要检查套接字文件及其目录/var
和/var/pgsql_socket
的权限。您的Rails应用程序(OSX用户)必须对这些目录具有执行(x)权限(最好授予每个人权限),并且套接字应具有完全权限(wrx)。您可以使用ls -lAd <file>
来检查这些内容,如果其中任何一个是符号链接,则需要检查链接指向的文件或目录。
您可以为自己更改目录的权限,但套接字由postgresql.conf
中的postgres配置。这可以在与pg_hba.conf
相同的目录中找到(您必须弄清楚哪一个)。设置权限后,您需要重新启动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.
修改强>
我在google上做了一个快速搜索,您可能希望查看它是否相关。
这可能会导致find
配置文件失败的任何尝试。
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
用户密码验证失败:
psql: FATAL: password authentication failed for user "couling"
缺少unix套接字文件:
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"?
答案 1 :(得分:41)
我的直觉是,这是(再次)一个mac / OSX-thing:前端和后端假定unix-domain套接字的不同位置(用作 rendezvous 点)。
清单:
ps aux | grep postgres | grep -v grep
应该诀窍find / -name .s.PGSQL.5432 -ls
(套接字曾经位于/ tmp;您可以开始查看)如果postgres正在运行,并且套接字实际存在,您可以使用:
psql -h /the/directory/where/the/socket/was/found mydbname
(尝试连接到unix-domain套接字)
你现在应该得到psql提示:尝试\d
然后\q
退出。你也可以
试试:
psql -h localhost mydbname
。(尝试连接到localhost(127.0.0.1)
如果由于授权不足而导致这些尝试失败,您可以更改pg_hba.conf(和SIGHUP或重启)在这种情况下:还要检查日志。
类似的问题:Can't get Postgres started
注意:如果你可以进入psql提示,那么快速解决这个问题就是改变你的config/database.yml
,添加:
host: localhost
或者您可以尝试添加:
host: /the/directory/where/the/socket/was/found
就我而言,host: /tmp
答案 2 :(得分:26)
尝试卸载pg gem(gem uninstall pg
)然后重新安装 - 如果您使用bundler,则bundle install
,否则gem install pg
。此外,确保路径选择正确的版本:Lion有posgresql版本(之前的版本没有),它可能在您本地安装版本之前的路径中(例如MacPorts,自制软件)。
在我的情况下:自制的postgresql安装,更新了postgresql,rails等等,然后出现了这个错误。卸载并重新安装pg gem为我做了。
答案 3 :(得分:20)
套接字文件的位置在编译时被烘焙到gem中。因此,您需要重建您的pg gem。
gem pristine pg
# or
bundle exec gem pristine pg
这应解决该特定问题。
答案 4 :(得分:16)
如果您收到类似的错误:
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,则指定的目录应该不同。
注意:这不是上面看到的确切错误消息,但此线程是该错误消息的第一个结果。
答案 5 :(得分:8)
为我解决了这个错误的原因是在postgres目录中删除了一个名为postmaster.pid的文件。请使用以下链接查看我的问题/答案,了解分步说明。我的问题与文件权限无关:
psql: could not connect to server: No such file or directory (Mac OS X)
然而,回答这个问题的人们放弃了很多游戏,谢谢!我全力支持答案 6 :(得分:7)
这是我解决该错误信息的方式,部分基于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
希望这对任何人都有帮助。这似乎有点不对,但是嘿,它有效!
答案 7 :(得分:6)
我升级到新的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
答案 8 :(得分:4)
刚刚确认我在PSQL和Django上有类似的问题,
看起来是因为我的psql服务器没有正确关闭而postmaster.pid文件仍然存在(应该在我的postgres文件夹中自动删除)。
删除了这个和所有好的
答案 9 :(得分:4)
我收到同样的错误(原来这是postmaster.pid
的错误。这是我如何让postgres重新启动并再次运行(credit to Ricardo Burillo for the fix):
$ rm /usr/local/var/postgres/postmaster.pid
$ pg_resetxlog -f /usr/local/var/postgres
答案 10 :(得分:3)
我读了很多关于这个错误的主题,我的解决方案是简单地重启postgres:
sudo service postgresql restart
这里没有提到。
答案 11 :(得分: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):
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。
答案 12 :(得分:3)
尝试使用带有rails的postgresql时遇到了类似的问题。更新我的Gemfile以使用新版本的gem pg为我解决了这个问题。 (gem pg version 0.16.0有效)。在Gemfile中使用:
gem 'pg', '0.16.0'
然后运行以下内容来更新gem
bundle install --without production
bundle update
bundle install
答案 13 :(得分:2)
就我而言,之前的解决方案都没有。您可以在Rails配置文件中使用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
都被删除了,我不得不重复这些命令。解决方案有效,但它太可怕了,所以只需修改Rails数据库配置文件:)
答案 14 :(得分:2)
当我使用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
答案 15 :(得分:2)
今天我的Macbook电池耗尽后,这件事发生在我身上。我认为这可能是因为关机不当造成的。在我这样的情况下你所要做的就是删除postmaster.pid
导航到文件夹
cd /usr/local/var/postgres
检查postmaster.pid是否存在
ls
删除postmaster.pid
rm postmaster.pid
答案 16 :(得分:1)
你好世界:)
对我来说最好但最奇怪的方法就是做下一件事。
1)下载postgres93.app或其他版本。将此应用程序添加到/ Applications /文件夹中。
2)在文件.bash_profile
中添加一行(命令)(在我的主目录中):
export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH这是来自
psql
的{{1}}的路径。每次启动控制台时都会运行行(命令)。
3)从Postgres93.app
文件夹中启动Postgres93.app
。它启动本地服务器(端口为“5432”,主机为“localhost”)。
4)在完成所有这些操作之后,我很高兴运行/Applications/
和其他命令并看到它有效!每次系统启动时都可以运行$ createuser -SRDP user_name
。
5)此外,如果您想以图形方式查看数据库,则应安装Postgres93.app
。这是将postgres DB视为漂亮的数据表
当然,它仅对本地服务器有用。如果这些指示可以帮助那些遇到这个问题的人,我将很高兴。
答案 17 :(得分:1)
MacOSX在这里。使用自制程序将postresql安装从9.1之前的版本升级到9.1.2后,我遇到了同样的问题。 (顺便说一下,记得在使用pg_dump升级之前转储数据库,9.1之前的数据库是不兼容的。)同样的问题,相同的错误消息。
卸载pg gem对我来说很有用。我实际上不得不做一些跳舞来发现这个问题。首先,我做了一个全球宝石卸载,清除所有旧宝石的甲板(有几个)。然后我从我的Gemfile中删除了pg,重新绑定,恢复了pg引用,并再次反弹。
在那之后,它就像一个魅力。
答案 18 :(得分:0)
gem uninstall pg
在OS X上使用Homebrew:
gem install pg -- --with-pg-config=/usr/local/bin/pg_config
答案 19 :(得分:0)
我有这个问题困扰着我,经过进一步的调查(运行rake db:setup
),我看到rails试图连接到以前使用的postgres实例 - 一个存储在env变量中的DATABASE_URL。
修复:unset DATABASE_URL
答案 20 :(得分:0)
我尝试了解决这个问题的大部分解决办法,但无法解决问题。
我运行lsof -P | grep ':5432' | awk '{print $2}'
,显示进程的PID正在运行。但是我无法用kill -9 <pid>
杀死它。
当我运行pkill postgresql
时,流程终于停止了。希望这会有所帮助。