PostgreSQL错误“无法连接到服务器:没有这样的文件或目录”
像其他人一样,当我运行rake数据库时遇到了这个错误:在我的项目中进行迁移,甚至为我的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上进行更多的search,但是基本上你可以把PostgreSQL连接起来,这样看起来在tmppath中的东西实际上就能find真正的path。
这是我find几个要尝试的东西的链接,特别是像上面那样做符号链接, Mac OSX Lion Postgres不接受/tmp/.s.PGSQL.5432上的连接 。 我仍然希望有人能够正确的解释在OS X上安装PostgreSQL的概念,以及为什么这么困难。
最新的见解,以帮助排除故障:
$ which psql // This tells you which PostgreSQL you are using when you run $ psql.
然后运行:
$ echo $PATH
要考虑的关键是这样的:
确保在运行OS X系统的PostgreSQL之前,要运行PostgreSQL副本的path条目。
这是决定运行哪个PostgreSQL的一个核心要求,也是我被告知的大部分问题。
检查postgres目录中是否有postmaster.pid,可能是/usr/local/var/postgres/
删除这个并启动服务器。
更新:这是一个更好的修复,如果你在OSX上…
老答案:
这里是修复,更多信息在这里:
https://github.com/mxcl/homebrew/issues/5004
首先,停止数据库,然后
- cd / var
- rm -r pgsql_socket
- ln -s / tmp pgsql_socket
- chown_postgres:_postgres pgsql_socket
- 重新启动postgres(而不是你的电脑)
对我来说,这个工作
rm /usr/local/var/postgres/postmaster.pid
对于你提到的上述错误,这为我工作。
1)如果你在安装的时候提到了其他默认的端口号5432,可能会改变你在postgres.conf文件中没有指定的默认端口。
(要么)
2)更改postgresql.conf文件中的端口号,然后重新启动数据库服务器
(要么)
3)而不是像psqltypes的完整命令
“psql -p 5432 -h localhost”
- 服务器名称和端口号
如果你正在运行Homebrew,请卸载Postgresql end pg gems:*
$ gem uninstall pg $ brew uninstall postgresql
下载并运行以下脚本修复/ usr / local的权限:* https://gist.github.com/rpavlik/768518
$ ruby fix_homebrew.rb
然后再次安装Postgres和pg gem:*
$ brew install postgresql $ initdb /usr/local/var/postgres -E utf8
在login时启动launchd启动postgresql:
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
或者手动启动。
安装pg gem
$ gem install pg
我希望有帮助
当我将Postgres升级到9.3.x时,我遇到了这个问题。 对我来说,快速解决scheme是降级到我之前拥有的9.2.x版本(无需安装新版本)。
$ ls /usr/local/Cellar/postgresql/ 9.2.4 9.3.2 $ brew switch postgresql 9.2.4 $ launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist $ launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist <open a new Terminal tab or window to reload> $ psql
这个答案提供了一个更全面的解释,以及解决问题的其他方法。
所以对于这里的很多问题,似乎人们已经在运行psql,并且必须删除postmaster.pid
。 然而,我没有这个问题,因为我甚至没有正确安装postgres在我的系统。
这是一个在MAC OSX优胜美地为我工作的解决scheme
- 我去了http://postgresapp.com/并下载了应用程序。;
- 我把应用程序移动到应用程序/目录
- 我将它添加到.bashrc或.bash_profile或.zshrc中,将其添加到$ PATH中:
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
- 我从Applications目录运行了postgres,然后再次运行这个命令并运行。
希望这可以帮助! Toodles!
此外,这个答案帮助我最: https : //stackoverflow.com/a/21503349/3173748
在运行:psql -p 5432 -h localhost时,它不使用环回驱动程序,而是使用真实的套接字,因此您需要将postgresconfiguration为接受套接字连接。 因此,即使pgadmin和其他客户端可以工作,psql不会。
您需要更改postgresql.conf文件和pg_hba.conf文件,以便允许通过实际套接字进行连接。 这也将允许远程IP连接,这就是为什么默认情况下禁用它的原因。
这些文件位于数据目录中,但实际位置可能因安装postgres的方式而有所不同。 在运行postgres的时候,运行命令:
ps -ef | grep postmaster
这两个文件是-D目录(可能是/ usr / local / pgsql / data)。
对于postgresql.conf文件,取消注释listen_address并将其更改为:
listen_address = '*'
为pg_hba.conf添加行:
host all all 0.0.0.0/0 md5
原因
Lion自带一个已安装的postgres版本,默认使用这些二进制文件。 一般来说,你可以通过使用自制的postgres二进制文件的完整path来解决这个问题,但其他程序可能仍然存在问题。
解决scheme
curlhttp://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | SH
通过
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
你好,世界 :)
对我来说,最好但奇怪的做法是做下一件事。
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数据库视为漂亮的数据表是一种很好的方法
当然,这只对本地服务器有帮助。 如果这个指示帮助那些面对这个问题的人,我会很高兴。
我有PostgreSQL 9.3并得到相同的错误,
无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1)上运行,并接受端口5432上的TCP / IP连接?
我解决这个使用:
chmod 777 /var/lib/pgsql/9.3/data/pg_hba.conf service postgresql-9.3 restart
它适用于我。
对于它的价值,我在pg_hba.conf
文件( /etc/postgresql/9.5/main/pg_hba.conf
)中遇到了错误( md4
而不是md5
)
如果你像我一样到达这里,仔细检查一下这个文件,以确保在那里没有任何可笑的东西。
我不是很了解Mac或Homebrew,但我很了解PostgreSQL。
你想知道PostgreSQL试图启动的日志以及PostgreSQL的套接字目录是什么。 默认情况下,当您构buildPG时,套接字目录是/ tmp /。 如果你在编译PG时没有改变它,然后启动了PG,那么你应该可以在/ tmp中看到一个套接字文件:ls -al / tmp
套接字文件以“。”开头,所以你不会用“-a”来查看。
如果你没有在那里看到一个套接字,并且你没有看到ps awux |中的任何东西 grep postgres,那么PG可能没有运行,或者它可能是OSX安装的。 可能发生的情况是,你可能会在localhost的端口5432上听到冲突,使用netstat -anp来查看5432上是否正在侦听。如果Mac OSX PG已经在该端口上侦听,那么可能会成为问题。
希望有所帮助。 我听说自制软件可能会让事情变得有些丑陋,我曾经谈到的很多人鼓励使用虚拟机。
出现此错误的一个原因是当您重新启动计算机时,本地postgres数据库closures。 在新的terminal窗口中,只需input:
$psql -h localhost
重新启动服务器。
在本地运行PostgreSQL可能会有不同的问题。 我会build议清理安装的所有版本的postgres,并开始新鲜。 一旦你安装了它,如果你的rails项目是最新的db/schema.rb
,那么重新创build你的数据库是很容易的
以下是我通常在Mac上安装PostgreSQL的方法 。 如果您在本地用户下以root用户运行数据库,则可能需要省略创buildtodo
用户的最后一步
其中一个原因可能是这样的
postgresql.conf文件中的unix_socket_directories没有列出它正在查找的目录。
在问题示例中,它正在寻找目录/ tmp,这必须在postgresql.conf文件中提供
像这样的东西:
unix_socket_directories = '/var/run/postgresql,/tmp' # comma-separated list of directories
这个解决scheme为我工作。
如果你在MacOS和使用自制软件,我发现这个答案非常有用:
https://stackoverflow.com/a/27708774/4062901
对我来说,我的服务器正在运行,但由于升级,我有连接问题(注:我使用brew服务)。 如果Postgres正在运行,请尝试cat /usr/local/var/postgres/server.log
并查看日志所说的内容。 我的错误是一个迁移,而不是连接问题。
他们提出的手动迁移之后,他们也提出了这个问题,但是我发现我的用户已经不再有一张桌子了。 试试这个命令来修复: createdb
(通过psql回答:FATAL:database“<user>”不存在 )
这很简单。 只在你的database.yaml文件中添加主机。