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

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

实际上,我安装了 PostgreSQL 9.4(带有 postGIS 扩展),安装后,一切都工作正常。

正如许多人所说,我已经设置了 /data 文件夹,检查了配置文件,等等。在其他项目上工作,所以我有一段时间没有在 psql 上工作,但是当安装完成后,它曾经正常工作,我创建了一个测试数据库,初始化了 postgres 用户等。

现在,我尝试启动 psql(使用“默认”postgres 用户)但无法连接!启动/停止/重新启动服务不会改变任何内容...

“psql”命令的结果(使用 postgres 用户):

psql: could not connect to server: No such file or directory
Is the server  running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

当我检查服务状态时,我得到了以下信息:

postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled)
Active: active (exited) since tue 2016-05-24 09:24:13 CEST; 3s ago
Process: 5658 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 5658 (code=exited, status=0/SUCCESS)

使用命令启动/停止/重新启动服务

sudo service postgresql start (or restart or stop)

不会改变任何实际系统行为。

日志说:

DETAIL:  Permissions should be u=rwx (0700).
FATAL:  data directory "/var/lib/postgresql/9.4/main" has group or world access

答案1

在 debian 系统上,postgresql 文件和目录应由 user 所属postgres,属于 group postgres,具有0700(目录)或0600(文件)权限。

如果不是这样,您可以使用以下方法修复权限和所有权:

sudo chown -R postgres:postgres /var/lib/postgresql/9.4/
sudo chmod -R u=rwX,go= /var/lib/postgresql/9.4/

X请注意命令中的大写字母chmod。与小写不同x,它将设置执行位仅有的在目录和文件上已经可执行文件(pg 目录中不应该有任何可执行文件)。

然后重新启动postgresql服务。

答案2

如果您确定您的 postgres 服务器正在运行,请尝试通过将主机指定为 localhost 来登录。当您单独使用 psql 时,它正在尝试使用套接字进行连接。

当我升级 Postgres 并想仍然访问我的旧服务器时,我遇到了这个问题。新的 psql 很混乱。

尝试:

psql -U username -h localhost

答案3

在运行时全新安装 postgreSQL13 后,我收到了完全相同的错误消息psql(无论是从正常的命令提示符还是之后sudo su - postgres):

psql: error: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

事实证明,我真的只需要启动该服务,因为它也是建议的当我收到有关“/var/run/postgresql/.s.PGSQL.5432”的错误时,如何访问 Postgres?

尝试:

  • sudo systemctl start postgresql(或用于enable在每次启动时启动它,请参阅Linux 上的 PostgreSQL 入门) 或者
  • sudo service postgresql start(例如 WSL2 上需要)。

然后:

sudo su - postgres
psql

你就在里面。

也许它对某人有帮助。不过,您的问题可能有所不同,因为您的服务器已经在运行。

相关内容