【问题标题】:Cannot connect PostgreSQL with psql - wrong UNIX-Domain-Socket无法使用 psql 连接 PostgreSQL - 错误的 UNIX-Domain-Socket
【发布时间】:2018-11-18 07:12:00
【问题描述】:

我正在运行 CentOS 7.5,无法设置 PostgreSQL。 如果我以用户 postgres 的身份登录并输入 psql postgres,我会收到以下错误消息:

psql: Could not connect to server: no such file or directory
does the server run locally and accepts connections on Unix-Domain-Socket "/var/run/postgresql/.s.PGSQL.5432"

但是,我将端口更改为 5543(在etc/systemd/system/postgresql.service 中通过将/lib/systemd/system/postgresql.service 包含为[服务] 并设置Environment=PGPORT=5543)。请注意,您不应直接在 /lib/ 中更改它,因为这会被覆盖。

所以,服务器查找错误的 UNIX-Domain-Socket 并没有找到(因为它不存在),但是根据sudo netstat -nlp,正确端口5543 的套接字确实存在:

5486/postgres /var/run/postgresql/.s.PGSQL.5543

postgresql.service 正在根据systemctl status postgresql.service 运行

感谢任何建设性的帮助。

【问题讨论】:

  • 如果我将端口恢复为默认的“5432”,它将工作并且我可以连接。但是,坚持使用默认端口并不安全。
  • 那么,您更喜欢“默默无闻的安全性”?
  • 如果你想说,是的。公平地说 - OP 中提供的端口只是用于解释的虚拟,因为根据经验,您可以信任任何人。但是,一方面保护东西不仅会使它们变硬,另一方面也会使它们更难使用。

标签: postgresql centos


【解决方案1】:

为什么要在 systemd 中更改它而不使用 PostgreSQL 的配置文件?那是 CentOS 的东西吗?

无论如何 - 您可以在您喜欢的任何端口上运行服务器,或者在各种端口上运行相同或不同版本的多个服务器实例。在这种情况下,尽管您需要告诉 psql 使用哪个端口。

您可以设置环境变量 (PGPORT),在命令行或 .psqlrc 文件中使用 -p 指定它。详情请见the manuals


编辑以响应 cmets:

如果您想为 psql 设置 PGPORT,请在用户的 shell 默认值或 /etc/bash... 或等效项中进行。您当然可以使用自定义端口将psql 替换为别名,或者如果您愿意,可以重新编译二进制文件本身。

我不确定从安全角度来看这是否真的很有用。似乎不太可能有人可以在您的计算机上运行本地进程,获得了您的 postgres 用户密码的访问权限,但不够聪明,无法查看服务器正在运行的端口。

【讨论】:

  • 是的,对于基于 RHEL 的操作系统来说,这是一个特殊的东西,它在配置文件中说: '注意:在 RHEL/Fedora 安装中,您不能在此处设置端口号;改为在服务文件中调整它`关于安全性 - 你可能是对的,但你应该能够以任何原因更改端口(例如,另一个服务已经在 5432 上运行)。
  • 所以,如果我在命令中指定端口,就像以用户 postgres 登录时的“psql postgres -p 5633”一样,设法让它工作。有没有办法将此设置为默认值?如您所见,我已经在服务配置文件中将 PGPORT 设置为环境变量(参见 OP)。
  • 你需要在用户的环境中设置,而不是systemd - ~/.bash_profile 或类似的。
  • 这样做 - 就像一个魅力:我已经为用户 postgres 编辑了 ~/.bash_profile 并将 PGPORT 导出到我想要的端口。然后,只需重新加载 .bash_profile 就一切正常了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-02
  • 2019-02-04
  • 2020-06-12
  • 2021-02-20
  • 1970-01-01
相关资源
最近更新 更多