PG::ConnectionBad:连接到套接字“/ var / run / postgresql / .s.PGSQL.5432”的服务器失败:没有这样的文件或目录。

3

我看到的大部分与 sudo service postgresql restart 有关。

我尝试了这个命令,但没有效果。 其他答案是从 /usr/local/var/psql 中删除一个文件。

问题在于我在 /local/ 中没有 /var/ 文件夹。

完整转储:

[17:51:55]  shell-ratings-backend (master)
// ♥  sudo service postgresql restart
 * Restarting PostgreSQL 14 database server                 [ OK ] 
[17:52:29]  shell-ratings-backend (master)
// ♥  rails db:migrate
rails aborted!
ActiveRecord::ConnectionNotEstablished: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/rails:5:in `<top (required)>'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:10:in `require'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:10:in `block in <top (required)>'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:7:in `tap'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:7:in `<top (required)>'

Caused by:
PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory
        Is the server running locally and accepting connections on that socket?
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/rails:5:in `<top (required)>'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:10:in `require'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:10:in `block in <top (required)>'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:7:in `tap'
/mnt/c/Users/Alex/dev/shell-ratings-backend/bin/spring:7:in `<top (required)>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
1个回答

2
错误显示psql工具无法找到连接到数据库服务器的套接字。可能是因为您没有在后台运行数据库服务,或者套接字位于其他位置,或者可能需要修复pg_hba.conf文件。
步骤1:验证数据库是否正在运行 该命令可能因您的操作系统而异。但在大多数*ix系统上,以下命令将起作用,它将在所有运行的进程中搜索postgres。
ps -ef | grep postgres

你可以查看以下所有可用选项来启动Postgres服务器。

man postgres 从那里,您会发现选项-D和-r分别是datadir和logfilename。

第二步:如果postgres服务正在运行,请使用find搜索套接字的位置,应该在/tmp中的某个位置。
sudo find /tmp/ -name .s.PGSQL.5432

如果PostgreSQL正在运行并接受套接字连接,则上述内容应告诉您套接字的位置。在我的机器上,它被确定为:
/tmp/.s.PGSQL.5432
然后,尝试使用此文件的位置显式连接psql,例如:
psql -h /tmp/ dbname

步骤三:如果服务正在运行但您看不到套接字 如果您找不到套接字,但看到服务正在运行,请验证pg_hba.conf文件是否允许本地套接字连接。
浏览到datadir目录,您应该能够找到pg_hba.conf文件。
默认情况下,在文件底部附近,您应该看到以下行:
“local”仅用于Unix域套接字连接。
local       all       all       trust

如果您看不到它,您可以修改文件并重新启动postgres服务。

1
该服务正在Windows上运行。它正在5432端口上运行,并且正在接受连接。 - ILikeClouds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接