繁体   English   中英

PostgreSQL 错误“无法连接到服务器:没有这样的文件或目录”

[英]PostgreSQL error 'Could not connect to server: No such file or directory'

像其他一些人一样,当我在我的项目中运行 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 不接受 /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

如果您在 OS X 上,“ Postgres.app ”是一个更好的解决方案


这是修复:

  1. 停止数据库
  2. cd /var
  3. sudo rm -r pgsql_socket
  4. sudo ln -s /tmp pgsql_socket
  5. chown _postgres:_postgres pgsql_socket
  6. 重启 PostgreSQL(不是你的电脑)

更多信息可在“ postgresql 9.0.3. on Lion Dev Preview 1 ”中找到。

对于您提到的错误,这对我有用。 执行以下操作之一

  1. 如果您在安装时使用了默认端口5432以外的其他端口,则可以更改您在postgres.conf文件中指定的默认端口。

  2. 更改postgresql.conf中的端口号并重新启动数据库服务器。

  3. 代替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

我希望有帮助

我通过升级 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 中对我有用的解决方案

  1. 我去了http://postgresapp.com/并下载了该应用程序。
  2. 我将应用程序移至 Application/ 目录
  3. 我通过将其添加到 .bashrc 或 .bash_profile 或 .zshrc 将其添加到 $PATH : export PATH=$PATH:/Applications/Postgres.app/Contents/Versions/latest/bin
  4. 我从 Applications 目录运行 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 

重新启动服务器。

你好世界 :)
对我来说最好但奇怪的方法是做接下来的事情。

1)下载postgres93.app或其他版本。 将此应用程序添加到 /Applications/ 文件夹中。

2)在文件.bash_profile (在我的主目录中)中添加一行(命令):

export PATH=/Applications/Postgres93.app/Contents/MacOS/bin/:$PATH
这是从Postgres93.apppsql的路径。 每次启动控制台时都会运行该行(命令)。

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 )时,我遇到了同样的错误

如果您像我一样来到这里,请仔细检查该文件一次,以确保其中没有任何可笑的东西。

只要通过运行brew services restart postgresql出现错误就重新启动 Postgres,然后再试一次

在本地运行 PostgreSQL 可能会有不同的问题。 我建议清理所有已安装的 postgres 版本并重新开始。 安装后,如果您的 rails 项目使用最新的db/schema.rb ,那么重新创建数据库非常容易

这是我通常在 Mac 上安装 PostgreSQL 的方法。 如果您在本地 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问题的以下解决方案帮助了我:

找到 postgres 数据目录。 在使用自制软件的 MAC 上,它是/usr/local/var/postgres/ ,其他系统可能是/usr/var/postgres/

通过运行删除 pid 文件:

rm postmaster.pid

重新启动postgress。 在 Mac 上,运行:

brew services restart postgresql

这很简单。 仅在您的 database.yaml 文件中添加主机。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM