如果无法使用psql命令连接到PostgreSQL服务器,可以采取以下对策

在创建PostgreSQL服务器后突然出现以下错误,导致无法使用psql命令连接,现总结解决方法。

$ psql
psql: サーバに接続できませんでした: そのようなファイルやディレクトリはありません
                              ローカルにサーバが稼動していますか?
                              Unixドメインソケット"/var/run/postgresql/.s.PGSQL.5432"で通信を受け付けていますか?

■ 环境信息

操作系统:CentOS 7.8.2003
软件:PostgreSQL 12.3
VirtualBox 6.1.14

任务内容

我会确认一下情况。

执行psql命令会返回错误。

$ psql
psql: サーバに接続できませんでした: そのようなファイルやディレクトリはありません
                              ローカルにサーバが稼動していますか?
                              Unixドメインソケット"/var/run/postgresql/.s.PGSQL.5432"で通信を受け付けていますか?

当尝试查看可能存在Unix域套接字的位置时,我认为目录本身似乎不存在。

$ ls -l /var/run/postgresql
ls: /var/run/postgresql にアクセスできません: そのようなファイルやディレクトリはありません

我认为在以下多部分中存在套接字文件。

$ ls -la /tmp/
srwxrwxrwx   1 postgres postgres       0 10月 18 21:31 .s.PGSQL.5432
-rw-------   1 postgres postgres      36 10月 18 21:31 .s.PGSQL.5432.lock

顺便提一句,创建套接字文件的位置在启动postgreSQL时会被输出。
在此情况下为”/tmp/.s.PGSQL.5432″。


$ pg_ctl -D $PGDATA start
waiting for server to start....2020-10-18 21:20:35.431 JST [1579] LOG:  starting PostgreSQL 12.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2020-10-18 21:20:35.431 JST [1579] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2020-10-18 21:20:35.431 JST [1579] LOG:  listening on IPv6 address "::", port 5432
2020-10-18 21:20:35.433 JST [1579] LOG:  listening on Unix socket "/tmp/.s.PGSQL.5432"
2020-10-18 21:20:35.449 JST [1580] LOG:  database system was shut down at 2020-10-17 01:05:14 JST
2020-10-18 21:20:35.454 JST [1579] LOG:  database system is ready to accept connections
 done
server started

■设置以使得能够通过psql命令连接到PostgreSQL服务器。

首先,让我们创建一个不存在的“var/run/postgresql”目录。

只是使用mkdir命令创建目录,在重新启动操作系统时,目录会被删除。为了在操作系统启动时自动创建该目录,我们将创建一个文件在”/etc/tmpfiles.d”目录中。

ファイルを作成し、以下の行を記載する。
# vi /etc/tmpfiles.d/postgresql.conf
d /var/run/postgresql 0755 postgres postgres -


設定を反映させます。
# systemd-tmpfiles --create /etc/tmpfiles.d/postgresql.conf 

ディレクトリが作成されたことを確認します。
# ls -la /var/run/postgresql/
drwxr-xr-x  2 postgres postgres  80 10月 18 21:33 .
drwxr-xr-x 25 root     root     760 10月 18 21:31 ..

编辑PostgreSQL的配置文件,将套接字文件的输出路径从”/tmp”更改为”/var/run/postgresql”。

postgreSQLを実行するユーザに切り替えます。
# su - postgres

$ vi $PGDATA/postgresql.conf
/unix_socketで検索すると対象の行が見つかると思います。

#unix_socket_directories = '/tmp' # comma-separated list of directories
↓ 以下に変更
unix_socket_directories = '/var/run/postgresql' # comma-separated list of directories


启动PostgreSQL服务器。
确保套接字文件在“/var/run/postgresql/.s.PGSQL.5432”处被接受。


$ pg_ctl -D $PGDATA start
waiting for server to start....2020-10-18 21:59:06.590 JST [1781] LOG:  starting PostgreSQL 12.3 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-39), 64-bit
2020-10-18 21:59:06.590 JST [1781] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2020-10-18 21:59:06.590 JST [1781] LOG:  listening on IPv6 address "::", port 5432
2020-10-18 21:59:06.594 JST [1781] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2020-10-18 21:59:06.612 JST [1782] LOG:  database system was shut down at 2020-10-18 21:59:00 JST
2020-10-18 21:59:06.614 JST [1781] LOG:  database system is ready to accept connections
 done
server started

确认已经创建了名为 “.s.PGSQL.5432” 的套接字文件。


$ ls -la /var/run/postgresql/
合計 4
drwxr-xr-x  2 postgres postgres  80 10月 18 21:33 .
drwxr-xr-x 25 root     root     760 10月 18 21:31 ..
srwxrwxrwx  1 postgres postgres   0 10月 18 21:33 .s.PGSQL.5432
-rw-------  1 postgres postgres  51 10月 18 21:33 .s.PGSQL.5432.lock

让我们通过psql命令连接到PostgreSQL服务器。


$ psql
psql (9.2.24, サーバー 12.3)
注意: psql バージョン 9.2, サーバーバージョン 12.0.
         psql の機能の中で、動作しないものがあるかもしれません。
"help" でヘルプを表示します.

postgres=# 

以上述就是。

shì.)

请参考以下网址

再启动后,/var/run/postgresql不见了。

如何将PostgreSQL的默认Unix套接字位置从/tmp更改

广告
将在 10 秒后关闭
bannerAds