繁体   English   中英

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

[英]PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directory

我所看到的大部分内容都围绕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)

该错误指出 psql 实用程序找不到连接到数据库服务器的套接字。 要么你没有在后台运行数据库服务,要么套接字位于其他地方,或者 pg_hba.conf 需要修复。

步骤 1:验证数据库是否正在运行 该命令可能因您的操作系统而异。 但是在大多数 *ix 系统上,以下内容会起作用,它将在所有正在运行的进程中搜索 postgres

ps -ef | grep postgres

您可以使用以下命令查看可用于启动 postgres 服务器的所有选项。

man postgres 从那里,您会看到选项 -D 和 -r 分别是数据目录和日志文件名。

第二步:如果postgres服务正在运行,使用find查找socket的位置,应该在/tmp的某处

sudo find /tmp/ -name .s.PGSQL.5432

如果 postgres 正在运行并接受套接字连接,上面应该告诉你套接字的位置。 在我的机器上,结果是:

/tmp/.s.PGSQL.5432 然后,尝试通过 psql 显式使用此文件的位置进行连接,例如。

psql -h /tmp/ dbname

第 3 步:如果服务正在运行但您没有看到套接字如果您找不到套接字但看到服务正在运行,请验证 pg_hba.conf 文件是否允许本地套接字。

浏览到 datadir,您应该会找到 pg_hba.conf 文件。

默认情况下,在文件底部附近,您应该会看到以下几行:

"local" 仅用于 Unix 域套接字连接

local       all       all       trust

如果没有看到,可以修改文件,重启postgres服务。

暂无
暂无

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

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