【问题标题】:Postgresql: Unable to connect through psql at console to default localhostPostgresql:无法通过控制台上的 psql 连接到默认本地主机
【发布时间】:2015-07-30 05:41:06
【问题描述】:

在我的本地主机系统上的 5432 上运行和验证的 Postgresql 服务器:

如果我输入:psql -l,我会得到以下响应:

psql:无法连接到服务器:没有这样的文件或目录
服务器是否在本地运行并接受 Unix 域套接字“/var/run/postgresql/.s.PGSQL.5432”上的连接?

如果我输入psql -h localhost -l,它会起作用并给我一个数据库列表。

pg_hba.conf 文件已打开,显示:

TYPE    DATABASE        USER            ADDRESS                 METHOD

“local”值仅适用于 Unix 域套接字连接:

local   all             all                                     trust

允许任何IP无密码连接:

host    all             all             0.0.0.0/0               trust

IPv4 本地连接:

host    all             all             127.0.0.1/32            trust

IPv6 本地连接:

host    all             all             ::1/128                 trust

我错过了什么?在其他系统上,命令行的第一次调用工作正常。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    听起来你在运行命令时连接的是本地主机,而不是文件套接字.. 尝试

    psql -h localhost -p 5432 
    

    【讨论】:

      【解决方案2】:

      默认管理员登录sudo -u postgres psql

      使用特权psql -h host -p port -U User_Name db_name 登录特定数据库

      【讨论】:

        【解决方案3】:

        服务器是否在本地运行并接受 Unix 域上的连接 套接字“/var/run/postgresql/.s.PGSQL.5432”?

        这只是意味着服务器上的unix_socket_directory配置参数与客户端psql的默认值不同。

        /var/run/postgresql 是基于 Debian 的软件包的默认 Unix 域套接字路径。对于自编译服务器,它是/tmp。它也可以是在postgresql.conf 或通过启动指令指定的自定义路径。

        假设它是/tmp,您可以使用psql -l -h /tmp。该命令知道-h 后面的参数将被解释为目录而不是主机名,因为它以斜杠开头。

        【讨论】:

        • 如果这个命令有效psql -U postgres -h /tmp,或者这个su - postgres -c "psql -h /tmp",那么你应该在这里找到一个解决方案:stackoverflow.com/a/50055155/3412316
        • @Kiruahxh:但请注意,解决方案是一种无法抵抗重启的创可贴(/var/run 将被清除)。问题的根本原因是客户端和服务器在连接位置上不匹配,这是一个配置问题。
        猜你喜欢
        • 1970-01-01
        • 2020-03-01
        • 1970-01-01
        • 2017-11-23
        • 2020-10-05
        • 2014-11-06
        • 2012-03-26
        • 2011-10-16
        相关资源
        最近更新 更多