像其他一些人一样,当我在我的项目中运行rake db:migrate或甚至为我的Ruby on Rails 3.2应用程序尝试大多数数据库任务时,我收到此错误 .
PGError(无法连接到服务器:没有这样的文件或目录 . 服务器是否在本地运行并接受Unix域套接字上的连接“/tmp/.s.PGSQL.5432”?
很久以前我用Homebrew安装PostgreSQL并且在尝试安装MongoDB之后,我的PostgreSQL安装从未如此 . 我正在运行OS X v10.6 Snow Leopard .
有什么问题,我怎么能更好地理解PostgreSQL是如何在我的Mac上设置的?
到目前为止(我认为)这告诉我PostgreSQL没有运行(?) .
ps -aef|grep postgres (ruby-1.9.2-p320@jct-ana) (develop) ✗
501 17604 11329 0 0:00.00 ttys001 0:00.00 grep postgres
但这是否告诉我PostgreSQL正在运行?
✪ launchctl load -w /usr/local/Cellar/postgresql/9.1.4/homebrew.mxcl.postgresql.plist (ruby-1.9.2-p136)
homebrew.mxcl.postgresql: Already loaded
我该如何解决?我没看到什么?
PS: ~/Library/LaunchAgents
包含两个PostgreSQL .plist文件 . 我不确定这是否相关 .
org.postgresql.postgres.plist
homebrew.mxcl.postgresql.plist
我尝试了下面的结果,得到了如下结果 .
$ psql -p 5432 -h localhost
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
could not connect to server: Connection refused
Is the server running on host "localhost" (fe80::1) and accepting
TCP/IP connections on port 5432?
我已经阅读过,因为OS X安装了自己版本的PostgreSQL,而Homebrew在不同的地方安装了不同的版本,PostgreSQL命令在/ tmp /目录中查找 . 你需要在Stack Overflow上搜索更多内容,但基本上你是符号链接PostgreSQL,这样任何查看该tmp路径的内容实际上都会找到真正的路径,如果这是有道理的 .
这是我发现更多东西要尝试的链接,特别是如上所述的符号链接Mac OSX Lion Postgres does not accept connections on /tmp/.s.PGSQL.5432 . 我仍然希望有人能够对OS X上安装PostgreSQL背后的概念进行合理的解释,以及为什么这么困难 .
帮助进行故障排除的最新见解:
$ which psql // This tells you which PostgreSQL you are using when you run $ psql.
然后运行:
$ echo $PATH
需要考虑的关键是:
Ensure that the path entry for the copy of PostgreSQL you want to run COMES BEFORE the path to the OS X system's PostgreSQL.
这是决定运行PostgreSQL的核心要求,也是我所说的导致大多数这些问题的原因 .
18 回答
UPDATE: 如果您使用OSX,这里有更好的修复...
http://postgresapp.com/
旧答案:
这是修复,更多信息在这里:
https://github.com/mxcl/homebrew/issues/5004
首先,停止db,然后
cd / var
rm -r pgsql_socket
ln -s / tmp pgsql_socket
chown _postgres:_postgres pgsql_socket
重启postgres(不是你的电脑)
检查postgres目录中没有postmaster.pid,可能是
/usr/local/var/postgres/
删除它并启动服务器 .
检查 - https://github.com/mperham/lunchy是launchctl的一个很棒的包装器 .
对我来说,这是有效的
对于你提到的上述错误,这对我有用..
1)可能会更改postgres.conf文件中未指定的默认端口,如果您在安装时提到了其他默认端口号5432 .
(要么)
2)更改postgresql.conf文件中的端口号,然后重新启动数据库服务器
(要么)
3)代替psql类型的完整命令
“psql -p 5432 -h localhost”
If you are running Homebrew, uninstall Postgresql end pg gems:*
Download and run the following script to fix permission on /usr/local:* https://gist.github.com/rpavlik/768518
Then install Postgres again and pg gem:*
To have launchd start postgresql at login run:
Or start manually.
Install pg gem
我希望有所帮助
当我将Postgres升级到9.3.x时,我遇到了这个问题 . 对我来说,快速修复是降级到之前的9.2.x版本(无需安装新版本) .
This回答提供了更全面的解释以及解决问题的其他方法 .
所以对于这里的很多问题,似乎人们已经在运行psql并且不得不删除
postmaster.pid
. 但是,我没有那个问题,因为我从来没有在我的系统中正确安装postgres .这是一个适用于MAC OSX Yosemite的解决方案
我去了http://postgresapp.com/并下载了应用程序 .
我将应用程序移动到了Application /目录
我将它添加到$ PATH,将其添加到.bashrc或.bash_profile或.zshrc:
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
我从Applications目录运行了postgres并再次运行命令,它运行正常 .
希望这可以帮助! Toodles!
此外,这个答案对我帮助最大:https://stackoverflow.com/a/21503349/3173748
当您运行:psql -p 5432 -h localhost时它不使用环回驱动程序但使用真正的套接字,因此您需要配置postgres以接受套接字连接 . 因此,即使pgadmin和其他客户端可以工作,psql也不会 .
您需要更改postgresql.conf文件和pg_hba.conf文件,以便允许通过真正的套接字进行连接 . 这也将允许从远程IP连接,这就是默认情况下禁用它的原因 .
这些文件位于数据目录中,但实际位置可能会有所不同,具体取决于postgres的安装方式 . 运行postgres后,运行命令:
这两个文件是-D目录(可能是/ usr / local / pgsql / data) .
对于postgresql.conf文件,取消注释listen_address并将其更改为:
对于pg_hba.conf添加行:
我真的不懂Mac或Homebrew,但我非常了解PostgreSQL .
您想知道PostgreSQL尝试启动日志的位置以及套接字目录适用于PostgreSQL . 默认情况下,在构建PG时,套接字目录为/ tmp / . 如果你在构建PG时没有改变它然后启动PG,你应该能够在/ tmp中看到一个套接字文件:ls -al / tmp
套接字文件以“ . ”开头,所以你不会用'-a'来看ls .
如果你没有在那里看到一个套接字,并且你没有看到ps awux中的任何内容grep postgres,然后PG可能没有运行,或者它可能是,并且它是OSX安装的 . 可能发生的情况是,您可能在侦听localhost上的端口5432时遇到冲突 - 使用netstat -anp来查看5432上正在侦听的内容(如果有的话) . 如果Mac OSX PG已经在侦听该端口,则可能是问题 .
希望有所帮助 . 我听说自制软件可以让事情变得有点丑陋,我和很多人谈过鼓励使用虚拟机 .
The Cause
Lion附带已安装的postgres版本,默认情况下使用这些二进制文件 . 一般来说,你可以通过使用自制postgres二进制文件的完整路径来解决这个问题,但是其他程序可能仍有问题 .
The Solution
通过
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
你好,世界 :)
The best but strange way for me was to do next things.
1) 下载postgres93.app或其他版本 . 将此应用程序添加到/ Applications /文件夹中 .
2) 在文件
.bash_profile
(在我的主目录中)中添加一行(命令):这是来自
Postgres93.app
的psql
的路径 . 每次启动控制台时都会运行行(命令) .3) 从
/Applications/
文件夹启动Postgres93.app
. 它启动本地服务器(端口为"5432",主机为"localhost") .4) 经过所有这些操作后,我很高兴运行
$ createuser -SRDP user_name
和其他命令并看到它有效!每次系统启动时都可以运行Postgres93.app
.5) 此外,如果您想以图形方式查看数据库,则应安装
PG Commander.app
. 这是将postgres DB视为漂亮的数据表的好方法当然,它仅对本地服务器有用 . 如果这些指示可以帮助那些遇到这个问题的人,我将很高兴 .
我有PostgreSQL 9.3并得到了同样的错误,
我修复了这个:
这个对我有用 .
为了它的 Value ,当我在
pg_hba.conf
文件中输入错字(md4
而不是md5
)时,我遇到了同样的错误(/etc/postgresql/9.5/main/pg_hba.conf
)如果你像我一样到达这里,请仔细检查该文件一次,以确保那里没有任何荒谬的东西 .
出现此错误的一个原因是当您重新启动计算机时,本地postgres数据库会关闭 . 在新的终端窗口中,只需键入:
重启服务器 .
在本地运行PostgreSQL可能会有不同的问题 . 我建议清理所有安装的postgres版本并重新开始 . 一旦安装完毕,如果你的rails项目是最新的,那么很容易重新创建你的数据库
db/schema.rb
这是我通常install PostgreSQL on a Mac . 如果您在本地root用户下运行数据库,则可能需要省略创建
todo
用户的最后一步其中一个原因可能是
postgresql.conf文件中的unix_socket_directories未与其查找的目录一起列出 .
在问题示例中,它正在查找目录/ tmp,这必须在postgresql.conf文件中提供
像这样的东西:
这个解决方案对我有用 .
如果您使用的是MacOS并使用自制软件,我发现这个答案非常有帮助:
https://stackoverflow.com/a/27708774/4062901
对我来说,我的服务器正在运行,但由于升级,我遇到连接问题(注意:我使用brew服务) . 如果Postgres正在运行,请尝试
cat /usr/local/var/postgres/server.log
并查看日志的内容 . 我的错误是迁移,而不是连接问题 .他们建议手动迁移之后(这确实有效)我发现我的用户不再有 table 了 . 尝试此命令来解决此问题:
createdb
(通过psql: FATAL: database "<user>" does not exist回答)这很简单 . 仅在database.yaml文件中添加主机 .