如果无法使用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更改