【问题标题】:PG::ConnectionBad: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: No such file or directoryPG::ConnectionBad:连接到套接字“/var/run/postgresql/.s.PGSQL.5432”上的服务器失败:没有这样的文件或目录
【发布时间】:2021-12-06 21:03:03
【问题描述】:

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

【问题讨论】:

    标签: ruby-on-rails postgresql


    【解决方案1】:

    错误表明 psql 实用程序找不到连接到数据库服务器的套接字。要么您没有在后台运行数据库服务,要么套接字位于其他位置,或者可能需要修复 pg_hba.conf。

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

    ps -ef | grep postgres
    

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

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

    第 2 步:如果 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 文件是否允许本地套接字。

    浏览到数据目录,您应该会找到 pg_hba.conf 文件。

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

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

    local       all       all       trust
    

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

    【讨论】:

    • 服务正在 Windows 上运行。它在端口 5432 上运行,并且正在接受连接..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多