与其他一些人一样,当我在我的项目中运行rake db:migrate或者甚至为我的Ruby on Rails 3.2应用程序尝试大多数数据库任务时,我收到此错误。
PGError(无法连接到服务器:没有这样的文件或目录。是 服务器在本地运行并接受Unix域套接字上的连接 “/tmp/.s.PGSQL.5432”?
我很久以前就用PostgreSQL安装了Homebrew,并且在最近尝试安装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
要考虑的关键是:
确保要运行的PostgreSQL副本的路径条目在OS X系统的PostgreSQL路径之前COMES。
这是决定运行PostgreSQL的核心要求,也是我所说的导致大多数问题的原因。
答案 0 :(得分:97)
检查postgres目录中没有postmaster.pid,可能是/usr/local/var/postgres/
删除它并启动服务器。
检查 - https://github.com/mperham/lunchy是launchctl的绝佳包装。
答案 1 :(得分:56)
更新:如果您使用OSX,这里有更好的修复...
旧答案:
以下是修复,更多信息:
https://github.com/mxcl/homebrew/issues/5004
首先,停止数据库,然后
答案 2 :(得分:47)
对我而言,这是有效的
rm /usr/local/var/postgres/postmaster.pid
答案 3 :(得分:14)
对于你提到的上述错误,这对我有用..
1)可能会更改postgres.conf文件中指定的默认端口, 如果您在安装时提到了其他默认端口号5432。
(OR)
2)更改postgresql.conf文件中的端口号并重新启动数据库服务器
(OR)
3)而不是psql类型的完整命令,如
“psql -p 5432 -h localhost”
答案 4 :(得分:10)
如果您正在运行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
要在登录运行时启动postgresql:
$ ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
或手动开始。
安装pg gem
$ gem install pg
我希望有所帮助
答案 5 :(得分:8)
当我将Postgres升级到9.3.x时,我遇到了这个问题。对我来说,快速修复是降级到之前的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
This回答提供了更全面的解释以及解决问题的其他方法。
答案 6 :(得分:5)
因此,对于此处的许多问题,似乎人们已经在运行psql并且必须删除postmaster.pid
。但是,我没有那个问题,因为我从来没有在我的系统中正确安装postgres。
这是一个在MAC OSX Yosemite中适用于我的解决方案
export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
希望这有帮助! Toodles!
此外,这个答案对我最有帮助:https://stackoverflow.com/a/21503349/3173748
答案 7 :(得分:4)
我在使用自制软件的Mac 10.15.5上运行时遇到此错误,并且似乎是一种更新的解决方案,可以在上述解决方案无法使用的情况下工作。
有一个名为postmaster.pid的文件,该文件应在postresql退出时自动删除。
如果不执行以下操作
答案 8 :(得分:4)
当你跑步时: psql -p 5432 -h localhost 它不使用环回驱动程序但使用真正的套接字,因此您需要配置postgres以接受套接字连接。因此,即使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
答案 9 :(得分:3)
我通过升级postgres来解决此问题。
brew update
brew upgrade
然后,我还必须升级数据库以与新的主要版本兼容,因为我从10升级到了11。
brew postgresql-upgrade-database
(来源https://github.com/facebook/react-native/issues/18760#issuecomment-410533581)
答案 10 :(得分:2)
我不太了解Mac或Homebrew,但我非常了解PostgreSQL。
您想知道PostgreSQL尝试启动日志的位置以及PostgreSQL的套接字目录。默认情况下,在构建PG时,套接字目录为/ tmp /。如果你在构建PG时没有改变它,然后你启动了PG,那么你应该能够在/ tmp中看到一个套接字文件:ls -al / tmp
套接字文件以&#34;。&#34;开头,因此您无法通过&#39; -a&#39;来查看它。到ls。
如果你在那里看不到插座,你就什么都看不到ps awux grep postgres,然后PG可能没有运行,或者它可能是并且它是OSX安装的。可能发生的事情是,您可能在localhost上使用端口5432时遇到冲突 - 使用netstat -anp来查看5432上正在侦听的内容(如果有的话)。如果Mac OSX PG已经在侦听该端口,那么可能是问题。
希望有所帮助。我听说自制软件可以让事情变得有点丑陋,很多人都在谈论鼓励使用虚拟机。
答案 11 :(得分: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视为漂亮的数据表
当然,它仅对本地服务器有用。如果这些指示可以帮助那些遇到这个问题的人,我将很高兴。
答案 12 :(得分:1)
我有PostgreSQL 9.3并且得到了同样的错误,
无法连接到服务器:连接被拒绝服务器是否正在运行 在主机“localhost”(127.0.0.1)上并接受TCP / IP连接 5432号港口?
我用以下方法解决了这个问题:
chmod 777 /var/lib/pgsql/9.3/data/pg_hba.conf
service postgresql-9.3 restart
它对我有用。
答案 13 :(得分:1)
对于它的价值,当我在md4
文件中输入错字(md5
而不是pg_hba.conf
)时,我遇到了同样的错误(/etc/postgresql/9.5/main/pg_hba.conf
)
如果你像我一样到这里,请仔细检查一下这个文件,以确保那里没有任何荒谬的东西。
答案 14 :(得分:1)
原因
Lion附带了已安装的postgres版本,默认使用这些二进制文件。一般来说,你可以通过使用自制postgres二进制文件的完整路径来解决这个问题,但是其他程序可能仍有问题。
解决方案
curl http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh | SH
通过
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
答案 15 :(得分:0)
出现此错误的一个原因是,当您重新启动计算机时,本地postgres数据库会关闭。在新的终端窗口中,只需输入:
$psql -h localhost
重启服务器。
答案 16 :(得分:0)
在本地运行PostgreSQL可能会有不同的问题。我建议清理所有安装的postgres版本并重新开始。安装完成后,如果您的rails项目具有最新版本db/schema.rb
以下是我通常install PostgreSQL on a Mac的方法。如果您在本地root用户下运行数据库,则可能需要省略创建todo
用户的最后一步
答案 17 :(得分:0)
其中一个原因可能是
postgresql.conf文件中的unix_socket_directories未列出它正在查找的目录。在问题示例中,它正在查找目录/ tmp,这必须在postgresql.conf文件中提供
类似的东西:
unix_socket_directories = '/var/run/postgresql,/tmp' # comma-separated list of directories
这个解决方案对我有用。
答案 18 :(得分:0)
如果您使用的是MacOS并使用自制软件,我发现这个答案非常有用:
https://stackoverflow.com/a/27708774/4062901
对我来说,我的服务器正在运行,但由于升级,我遇到连接问题(注意:我使用brew服务)。如果Postgres正在运行,请尝试createdb
并查看日志的内容。我的错误是迁移,而不是连接问题。
在他们建议的手动迁移之后(这确实有效)我发现我的用户不再有桌子了。尝试使用此命令来解决此问题:connect(a, b).
connect(a, d).
connect(a, e).
connect(b, a).
connect(b, c).
...
(通过psql: FATAL: database "<user>" does not exist回答)
答案 19 :(得分:0)
只要出现错误,请通过运行 void getallprocesses(string path)
{
Process[] processlist = Process.GetProcesses();
foreach (Process process in processlist)
{
try
{
if (string.Compare(process.MainModule.FileName, path, StringComparison.OrdinalIgnoreCase) == 0)
{
//hit
}
}
catch
{
}
}
}
重新启动Postgres,然后重试
答案 20 :(得分:0)
对我来说,命令rm /usr/local/var/postgres/postmaster.pid
不起作用,因为我安装了带有自制软件的特定版本的Postgresql。
正确的命令是rm /usr/local/var/postgres@10/postmaster.pid
。
然后brew services restart postgresql@10
。
答案 21 :(得分:-5)
这非常简单。只在database.yaml文件中添加主机。