PostgreSQL:为什么 psql 无法连接到服务器?

PostgreSQL: Why psql can't connect to server?

我输入了 psql,我得到了这个:

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"?

我用sudo netstat -nlp | grep 5432查看状态,但没有显示。 而且我在网上搜索,有人告诉我修改pg_hba.conf但是我不能locate这个文件。我也试过这个命令sudo ln -s /tmp/.s.PGSQL.5432 /var/run/postgresql/.s.PGSQL.5432。不行。

解决了!虽然我不知道发生了什么,但我只是删除了所有东西并重新安装了它。这是我用来删除它的命令 sudo apt-get --purge remove postgresql\*dpkg -l | grep postgres。后面一个就是把所有的包都找出来,万一不干净呢

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

第 1 步:验证数据库是 运行

该命令可能因您的操作系统而异。但在大多数 *ix 系统上,以下内容会起作用,它将在所有 运行 个进程

中搜索 postgres
ps -ef | grep postgres

在我的系统上,macosx,这会吐出

501   408     1   0  2Jul15 ??         0:21.63 /usr/local/opt/postgresql/bin/postgres -D /usr/local/var/postgres -r /usr/local/var/postgres/server.log

最后一列显示用于启动服务器的命令和选项。

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

man postgres

从那里,您会看到选项 -D-r 分别是 datadirlogfilename

第二步:如果postgres服务是运行

使用find搜索socket的位置,应该在/tmp

中某处
sudo find /tmp/ -name .s.PGSQL.5432

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

/tmp/.s.PGSQL.5432

然后,尝试明确使用此文件的位置通过 psql 进行连接,例如。

psql -h /tmp/ dbname

第 3 步:如果服务 运行 但您没有看到套接字

如果找不到套接字,但看到服务是 运行,请验证 pg_hba.conf 文件是否允许本地套接字。

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

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

# "local" is for Unix domain socket connections only
local       all       all       trust

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

只是想做一个小补充:如果你的实例在套接字上抱怨,你也可以检查 /data/postgresql.conf 文件中的 unix_socket_directories,它可能已设置为 /tmp,例如,如果您使用了第 3 方发行版。您可以将其更改为 /var/run/postgresql 并重新启动服务。这可能还需要在 /var/run 处创建一个 postgresql 目录,在 /var/lock 处创建一个 subsys/postgresql-9.6 目录,如果这些目录尚不存在的话(在 postgresql 9.6 中为我工作)。

从 psql 客户端远程访问服务器上的 postgres 数据库的 debian 快速指南:(更改的配置在文件中记录):

  1. 用 listen_address *
  2. 编辑 /etc/postgresql/10/main/postgresql.conf
  3. 编辑 /etc/postgresql/10/main/pg_hba.conf 并在末尾添加行 host all all 0/0 md5
  4. 创建登录角色postgres=# CREATE ROLE remoteuser LOGIN WITH PASSWORD 'foo'
  5. sudo /etc/init.d/postgresql restart 更改生效

  6. 使用 psql --host=ipofserver --port=5432 --username=remoteuser --password --dbname=mydb

  7. 从客户端登录
  8. 交互式询问密码,在本例中为 foo

我遇到过几次类似的问题。通常我只是在 tutorial 之后重新安装 PostgreSQL,这以丢失数据为代价解决了问题。

我下定决心今天要真正解决问题。重新启动 PostgreSQL 在 ubuntu 解决了它。 sudo /etc/init.d/postgresql restart

我对此错误消息的问题是对我操纵的密钥和 pem 证书的错误权限。对我帮助很大的是: /var/log/postgresql/postgresql-9.5-main.log 所有错误都在哪里。

所以对于我和我的朋友们来说,在开发 Node.js 应用程序(使用 Postgres 和 Sequelize)时,我们必须

  1. brew install postgresql(我们中的一个人缺少 postgres,我们中的一个人没有,但我们收到与上面列出的相同的错误消息)

  2. brew services start postgresql **** (使用 Homebrew 启动 postgres)

  3. createdb <name of database in config.json file>

  4. node_modules/.bin/sequelize db:migrate

  5. npm start

在全新安装 postgresql 期间。默认情况下,用户名和密码分配为 "postgres"。此 RDBMS 提供的功能是为新用户添加角色并创建数据库。如果您遇到此类错误:

  1. 默认用户名登录:

    root@kalilinux:~# sudo -i -u postgres

  2. 输入 psql 进行交互式提示

    postgres@kalilinux:~$ psql

  3. 要退出提示使用

    \q

  4. 创建新用户角色

    postgres@kalilinux:~$ createuser --interactive

现在您处于交互式 psql shell。享受。不要忘记从您的用户名登录并输入 psql for shell.

如果启动Postgres服务没有报错,请按照以下步骤进行

第 1 步:运行ning pg_lsclusters 将列出您设备上的所有 Postgres 集群 运行

例如:

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log

您的情况很可能状态会下降。如果不重启 PostgreSQL 服务

第 2 步:重新启动 pg_ctlcluster

#format is pg_ctlcluster <version> <cluster> <action>
sudo pg_ctlcluster 9.6 main start

#restart PostgreSQL service
sudo service postgresql restart

第 3 步:第 2 步失败并引发错误

如果重新启动 pg_lsclusters 不成功,则会抛出错误。 我的错误是(您可以在日志中看到错误 /var/log/postgresql/postgresql-9.6-main.log

FATAL: could not access private key file "/etc/ssl/private/ssl-cert-snakeoil.key": Permission denied
Try adding `postgres` user to the group `ssl-cert`

第 4 步:检查 postgres 的所有权

确保 postgres/var/lib/postgresql/version_no/main 的所有者 例如:sudo chown postgres -R /var/lib/postgresql/9.6/main/

第 5 步:检查 postgres 用户属于 ssl-cert 用户组

这件事发生在我身上,结果我错误地从“ssl-cert”组中删除了 Postgres 用户。 运行 以下代码用于修复用户组问题和修复权限

#set user to group back with
sudo gpasswd -a postgres ssl-cert

# Fixed ownership and mode
sudo chown root:ssl-cert  /etc/ssl/private/ssl-cert-snakeoil.key
sudo chmod 740 /etc/ssl/private/ssl-cert-snakeoil.key

# now postgresql starts! (and install command doesn't fail anymore)
sudo service postgresql restart

它可能会导致任何问题,例如,我的问题是由于配置文件上的拼写错误引起的。 有的说是证书文件导致的,有的说是本地人不匹配导致的。

如果您找不到关于您的问题的任何解决方案,请删除 postgres 并重新安装 it.This 是最好的解决方案。

该错误表示 Postgres 服务器不是 运行。尝试启动它:

sudo systemctl start postgresql

确保服务器在启动时启动:

sudo systemctl enable postgresql

我在 Devuan ascii 上遇到了同样的问题(也许 Debian 也是?)。配置文件 /etc/postgresql/9.6/main/postgresql.conf 包含指令 unix_socket_directories,默认指向 /var/run/postgresql。将其更改为 /tmp,大多数客户默认查看的位置已为我修复。

我遇到了同样的问题

sudo su - postgres
initdb --locale en_US.UTF-8 -D /var/lib/postgres/data
exit
sudo systemctl start postgresql
sudo systemctl status postgresql

这对我有用。

我通过检查我的文件系统解决了这个问题 磁盘已满,因此数据库无法启动

Unix 域套接字上的连接数 "/var/run/postgresql/.s.PGSQL.5432" ?

我尝试了一系列的故障排除,直到我检查我的磁盘使用情况,发现它已满,100% 使用率,

df -h
cd /var/log/odoo/
cat /dev/null > odoo-server.log
reboot

我遇到了同样的问题。 好像没有集群的时候就没有socket

安装期间默认集群创建失败,因为未设置默认区域设置。

我遇到了类似的问题,问题出在配置文件 pg_hba.conf 中。我之前做了一些更改,导致服务器在尝试启动时出错。注释掉额外添加的内容解决了问题。

重新启动实例对我有用。此外,正如在其他一些 post 中提到的, psql -h '/tmp' 在重新启动之前也能正常工作。但是post restart psql直接开始工作了。 因此,我的想法可能是一些文件所有权问题随着重启而被重置。

如果您的服务不安全,这可能是原因

vi /etc/postgresql/11/main/pg_hba.conf
  1. 打开hba配置文件,这个配置文件通常位于etc目录下。
host    all   all    localhost trust   md5
  1. 您可以删除 trust 关键字

  2. 保存pg_hba.conf

  3. sudo service postgresql restart.

验证 Postgres 是 运行 使用:

ps -ef | grep postgres
root@959dca34cc6d:/var/lib/edb# ps -ef|grep postgres
enterpr+    476  1  0 06:38 ?        00:00:00 /usr/lib/edb-as/11/bin/edb-postgres -D /var/lib/edb-as/11/main2 -c config_file=/etc/edb-as/11/main2/postgresql.conf

检查数据目录和 postgresql.conf

在我的案例中,-D 中的数据目录与 postgresql.conf

中的不同

所以我更改了 postgresql.conf 中的数据目录并且成功了。

我可以通过为 datadir 设置正确的权限来解决这个问题。 应该是

chmod 700 /var/lib/postgresql/10/main
chown postgres.postgres /var/lib/postgresql/10/main

在我的例子中,服务是 运行 但集群已关闭并且 psql 无法启动。我的配置文件看起来很完美,但它不断抛出配置错误并且似乎忽略了我所做的更改。

事实证明,每当您使用 ALTER SYSTEM SET ... 语法时,PostgreSQL 都会写入一个名为 postgresql.auto.conf 的文件。除了 常规 postgresql.confpg_hba.conf 文件之外,还读取该文件 。在我的 Ubuntu (18.04) 发行版中,它们位于不同的文件夹中(!):
- pg_hba.confpostgresql.conf 都在 /etc/postgresql/12/main
- 自动生成的文件是 /var/lib/postgresql/12/main/postgresql.auto.conf

我曾尝试使用 ALTER SYSTEM SET listen_addresses = <my-ip> 更改配置,但犯了一个错误,导致我找不到损坏的 "ghost" 配置。一旦我删除了 postgresql.auto.conf 中的违规行,它就解决了所有问题。

我在 Ubuntu 18.04 上使用 PostgreSQL 时遇到了这个问题。

我检查了我的 PostgreSQL 状态,发现 运行 没问题,使用:

sudo systemctl status postgresql

我还尝试使用以下命令在计算机上重新启动 PotgreSQL 服务器:

sudo systemctl restart postgresql

但问题仍然存在:

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"?

之后我做了以下

列出您设备上的所有 Postgres 集群 运行:

pg_lsclusters

这给了我这个红色的输出,表明它们都关闭了,状态也显示 down:

Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 down   postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
11  main    5433 down   postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
12  main    5434 down   postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

为其中一个服务器集群重新启动 pg_ctlcluster。对我来说,我重新启动了 PG 10:

sudo pg_ctlcluster 10 main start

然而它抛出了下面的错误,当我尝试重新启动其他 PG 集群时出现了同样的错误:

Job for postgresql@10-main.service failed because the service did not take the steps required by its unit configuration.
See "systemctl status postgresql@10-main.service" and "journalctl -xe" for details.

检查日志是否有错误,在本例中我的是 PG 10:

sudo nano /var/log/postgresql/postgresql-10-main.log

我看到了以下错误:

2020-09-29 02:27:06.445 WAT [25041] FATAL:  data directory "/var/lib/postgresql/10/main" has group or world access
2020-09-29 02:27:06.445 WAT [25041] DETAIL:  Permissions should be u=rwx (0700).
pg_ctl: could not start server
Examine the log output.

这是因为我更改了 PostgreSQL 数据目录的文件权限。

我通过 运行 下面的命令修复了它。我 运行 我机器上 3 个 PG 集群的命令:

sudo chmod -R 0700 /var/lib/postgresql/10/main
sudo chmod -R 0700 /var/lib/postgresql/11/main
sudo chmod -R 0700 /var/lib/postgresql/12/main

之后我重新启动了每个 PG 集群:

sudo pg_ctlcluster 10 main start
sudo pg_ctlcluster 11 main start
sudo pg_ctlcluster 12 main start

最后我再次检查了集群的健康状况:

pg_lsclusters

这一次一切正常,状态显示 在线:

Ver Cluster Port Status Owner    Data directory              Log file
10  main    5432 online postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
11  main    5433 online postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log
12  main    5434 online postgres /var/lib/postgresql/12/main /var/log/postgresql/postgresql-12-main.log

就这些了。

希望对您有所帮助

在我的例子中,我看到了这个错误,postgres 不是 运行。

问题是安装未能创建所需的集群。

解决方案是创建文件夹 /etc/postgres/{postgresql-version}/main

然后创建集群:

pg_createcluster {postgresql-version} main

之后,只要重新启动 postgresql 服务,一切就会正常。

在我的例子中,我遇到了这个错误,/var/run/postgresql/.s.PGSQL.5433(注意,它正在查找的文件中的一个数字,.s.PGSQL.5432)存在。尝试了此页面顶部的说明,但没有任何效果。

原来 /etc/postgresql/12 中有一个用于 PostGreSQL 12 配置文件的旧目录,我将其删除,从而解决了问题。

如果您在 linux 和 Ruby 上使用 windows 子系统 Rails 然后使用此命令检查您的 postgres 运行ning 在哪个端口 sudo nano /etc/postgresql/12/main/postgresql.conf 如果它在端口 5433 则转到 database.yml 文件并在其中添加 port:5433 然后 运行 命令 sudo service postgresql start 我已经解决了我的问题

在我的例子中,在 运行 进入错误

之后,以下内容用于启动 postgres
sudo service postgresql start
sudo su - postgres
psql

我相信我在卸载 PostgreSQL 11 和 12 后遇到了这个问题,而我已经在 Ubuntu 21 上安装了 13。我刚刚通过 sudo nano /etc/postgresql/13/main/postgresql.conf 解决了这个问题,并发现 port = 5433(不知道为什么)。所以我改了port = 5432。然后问题解决了。

如果您使用的是 WSL 2,请使用:

sudo service postgresql start

好的,我卸载了 postgres 10,但没有成功,一些 pg10 file/process 仍然存在。

然后我安装了 postgres 13,所以 pg 13 认为端口 5432 上还有另一个 pg 运行,所以它正在使用 5433。

解决方案:通过以下方式清除所有 pg:sudo apt-get --purge remove postgresql postgresql-* 然后 re-install 它。 (注意:这将删除所有现有数据)

这个命令在 Ubuntu 机器上对我有效

sudo su -postgres

它会要求您输入密码,很可能是您的默认密码。