无法连接到本地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.conf
configuration的。 这可以在与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 grep
ps aux | grep postgres | grep -v grep
ps 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