像其他一些人一样,当我在我的项目中运行 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 本地主机
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 路径之前。
这是一个核心要求,它决定了运行哪个 PostgreSQL,据我所知,这会导致大多数这些问题。
检查您的 postgres 目录中是否没有 postmaster.pid,可能是 /usr/local/var/postgres/
删除它并启动服务器。
检查 - https://github.com/mperham/lunchy 是 launchctl 的一个很好的包装器。
对我来说,这行得通
rm /usr/local/var/postgres/postmaster.pid
pg_ctl -D /usr/local/var/postgres -l /usr/local/var/postgres/server.log start
重新启动 postgresql
brew services restart postgresql
No such file or directory
中
如果您在 OS X 上,“Postgres.app”是一个更好的解决方案
这是修复:
停止数据库 cd /var sudo rm -r pgsql_socket sudo ln -s /tmp pgsql_socket chown _postgres:_postgres pgsql_socket 重启 PostgreSQL(不是你的电脑)
更多信息请参见“postgresql 9.0.3. on Lion Dev Preview 1”。
/tmp
改成 _postgres 感觉有点奇怪,但是嘿 :)
对于您提到的错误,这对我有用。执行以下操作之一:
如果您在安装时使用了默认端口 5432 以外的其他端口,则可以更改您在 postgres.conf 文件中指定的默认端口。更改 postgresql.conf 中的端口号并重新启动数据库服务器。而不是 psql 键入完整的命令: psql -p 5432 -h localhost 服务器名称和端口号
如果您正在运行 Homebrew,请卸载 Postgresql end pg gem:*
$ 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
我希望有帮助
brew info postgres
:ARCHFLAGS="-arch x86_64" gem install pg
initdb /usr/local/var/postgres -E utf8
有效。谢谢一堆。
我通过升级 postgres 解决了这个问题。
brew update
brew upgrade
然后我还必须升级数据库以兼容新的主要版本,因为我从 10 升级到了 11。
brew postgresql-upgrade-database
(来源 https://github.com/facebook/react-native/issues/18760#issuecomment-410533581)
当我将 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
“Homebrew install specific version of formula?”提供了更全面的解释以及解决问题的替代方法。
我在使用自制软件在 Mac 10.15.5 上运行时遇到了这个错误,这似乎是一个更新的解决方案,适用于上述解决方案。
有一个名为 postmaster.pid 的文件应该在 postresql 退出时自动删除。
如果它不执行以下操作
brew services stop postgresql <--- 在 rm 之前无法退出可能会损坏数据库
sudo rm /usr/local/var/postgres/postmaster.pid
所以对于这里的很多问题,似乎人们已经在运行 psql 并且不得不删除 postmaster.pid
。但是,我没有这个问题,因为我什至从来没有在我的系统中正确安装过 postgres。
这是一个在 MAC OSX Yosemite 中对我有用的解决方案
我去了 http://postgresapp.com/ 并下载了该应用程序。我将应用程序移动到 Application/ 目录我通过将其添加到 .bashrc 或 .bash_profile 或 .zshrc 将其添加到 $PATH : export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin 我运行了应用程序目录中的 postgres 并再次运行该命令并且它工作。
希望这可以帮助!面条!
此外,这个答案对我帮助最大:https://stackoverflow.com/a/21503349/3173748
当您运行: 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
我不太了解 Mac 或 Homebrew,但我非常了解 PostgreSQL。
您想弄清楚试图启动 PostgreSQL 的日志在哪里,以及 PostgreSQL 的套接字目录是什么。默认情况下,当你构建 PG 时,socket 目录是 /tmp/。如果您在构建 PG 并启动 PG 时没有更改它,那么您应该能够在 /tmp 中看到一个套接字文件:ls -al /tmp
套接字文件以“.”开头,因此您不会看到它带有 ls 的“-a”。
如果您在那里看不到套接字,并且您在 ps awux | 中看不到任何东西grep postgres,然后 PG 可能没有运行,或者它可能是并且它是 OSX 安装的。可能发生的情况是,您可能在 localhost 上侦听端口 5432 时遇到冲突 - 使用 netstat -anp 查看在 5432 上侦听的内容(如果有的话)。如果 Mac OSX PG 已经在侦听该端口,则可能成为问题。
希望有帮助。我听说自制软件会让事情变得有点难看,我交谈过的很多人都鼓励使用虚拟机。
对我来说,命令 rm /usr/local/var/postgres/postmaster.pid
不起作用,因为我用自制软件安装了特定版本的 postgresql。
正确的命令是 rm /usr/local/var/postgres@10/postmaster.pid
。
然后 brew services restart postgresql@10
。
原因
Lion 已经安装了一个 postgres 版本,并默认使用这些二进制文件。通常,您可以通过使用自制 postgres 二进制文件的完整路径来解决此问题,但其他程序可能仍然存在问题。
解决方案
卷曲 http://nextmarvel.net/blog/downloads/fixBrewLionPostgres.sh |嘘
通过
http://nextmarvel.net/blog/2011/09/brew-install-postgresql-on-os-x-lion/
您收到此错误的一个原因是您的本地 postgres 数据库在您重新启动计算机时关闭。在新的终端窗口中,只需键入:
$psql -h localhost
重新启动服务器。
Hello world :)
对我来说最好但奇怪的方法是做接下来的事情。
1) 下载 postgres93.app 或其他版本。将此应用程序添加到 /Applications/ 文件夹中。
2) 在文件 .bash_profile
(在我的主目录中)中添加一行(命令):
export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
psql
Postgres93.app
3) 从 /Applications/
文件夹启动 Postgres93.app
。它启动一个本地服务器(端口是“5432”,主机是“localhost”)。
4) 在所有这些操作之后,我很高兴运行 $ createuser -SRDP user_name
和其他命令并看到它有效! Postgres93.app
可以在每次系统启动时运行。
5) 此外,如果您想以图形方式查看数据库,您应该安装 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
)时,我遇到了同样的错误
如果您像我一样来到这里,请仔细检查该文件一次,以确保其中没有任何可笑的东西。
pg_hba.conf
文件在哪里?
只要通过运行 brew services restart postgresql
出现错误就重新启动 Postgres,然后再试一次
在本地运行 PostgreSQL 可能会有不同的问题。我建议清理所有已安装的 postgres 版本并重新开始。安装后,如果您的 rails 项目具有最新的 db/schema.rb
,则重新创建数据库非常容易
这是我通常的install PostgreSQL on a Mac。如果您在本地以 root 用户身份运行数据库,您可能希望省略创建 todo
用户的最后一步
原因之一可能是
postgresql.conf 文件中的 unix_socket_directories 未与它要查找的目录一起列出。
在问题示例中,它正在寻找目录 /tmp 这必须在 postgresql.conf 文件中提供
像这样的东西:
unix_socket_directories = '/var/run/postgresql,/tmp' # comma-separated list of directories
这个解决方案对我有用。
如果您使用的是 MacOS 并使用自制软件,我发现这个答案非常有帮助:
https://stackoverflow.com/a/27708774/4062901
对我来说,我的服务器正在运行,但由于升级,我遇到了连接问题(注意:我使用 brew 服务)。如果 Postgres 正在运行,请尝试 cat /usr/local/var/postgres/server.log
并查看日志内容。我的错误是迁移,而不是连接问题。
同样在他们提出的手动迁移之后(确实有效,但是)我发现我的用户不再有一个表。试试这个命令来解决这个问题:createdb
(通过 psql: FATAL: database "<user>" does not exist 回答)
来自不同 stackoverflow question 的以下解决方案帮助了我:
找到 postgres 数据目录。在使用自制软件的 MAC 上,它是 /usr/local/var/postgres/,其他系统可能是 /usr/var/postgres/
通过运行删除 pid 文件:
rm postmaster.pid
重新启动postgress。在 Mac 上,运行:
brew services restart postgresql
这很简单。仅在您的 database.yaml 文件中添加主机。
不定期副业成功案例分享
/usr/local/var/postgres/postmaster.pid
postgres 实例正在运行,您将不得不使用不好的实例。不好,如非确定性数据库行为、竞争条件等。但如果你确定没有 postgres 正在运行,删除是安全的