PostgreSQL:关于 Socket 文件 “/tmp/.s.PGSQL.nnnn” 丢失处理

在学习 PostgreSQL 的过程中,相信很多人都遇到过下面这个错误,错误代码如下:

问题描述

错误代码

1
2
3
4
[pg92@redhatB ~]$ psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.1921"?

备注:报错信息已经很显示,找不到文件 /tmp/.s.PGSQL.1921。

查看 /tmp

1
2
3
[root@redhatB tmp]# ll -alrt /tmp | grep "1921"
-rw-------. 1 pg92 pg92 56 4月 24 20:42 .s.PGSQL.1921.lock
备注:可以看到,文件 /tmp/.s.PGSQL.1921 不存在。

“/tmp/.s.PGSQL.1921” 文件

先来看看 socket 文件 “/tmp/.s.PGSQL.1921”,其中 1921 是 pg 的端口号; socket 文件可以通过
postgresql.conf 文件以下参数配置:

1
2
#unix_socket_directory = ''
#unix_socket_permissions = 0777

备注:其中参数 unix_socket_directory 用来配置 socket 文件的目录,默认是 /tmp 目录,参数unix_socket_permissions 用来设置 socket 文件的权限。回到开头的问题,如何解决呢?这里提供两种方法。

方法一: 使用 -h 连接参数

1
2
3
4
5
6
7
8
9
10
pg92@redhatB ~]$ psql
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/tmp/.s.PGSQL.1921"?

[pg92@redhatB ~]$ psql -h 127.0.0.1
psql (9.2.1)
Type "help" for help.

postgres=# q

备注:指定 -h 参数后,不再报之前的错。

方法二: 重启数据库

重启数据库

1
2
3
4
5
6
[pg92@redhatB ~]$ pg_ctl stop -m fast -D $PGDATA
waiting for server to shut down.... done
server stopped

[pg92@redhatB ~]$ pg_ctl start -D $PGDATA
server starting

再次查看 socket 文件

1
2
3
[root@redhatB tmp]# ll -alrt /tmp | grep "1921"
-rw-------. 1 pg92 pg92 56 4月 24 21:06 .s.PGSQL.1921.lock
srwxrwxrwx. 1 pg92 pg92 0 4月 24 21:06 .s.PGSQL.1921

备注:数据库重启后,在 /tmp 目录下会产生 .s.PGSQL.1921 文件。

连接测试

1
2
3
4
5
[pg92@redhatB ~]$ psql
psql (9.2.1)
Type "help" for help.

postgres=#

备注:这时 psql 连接时不再报之前的错。

疑问: 有没有不重启,也不带 -h 参数的方法解决这个问题?
目前还没找到不重启,也不带 -h 参数就能解决的方法,本人也测试过复制文件 .s.PGSQL.1921 到 /tmp 目录,但不带 -h 参数的连接依然会报这个错,有兴趣的朋友可以自己试一试。

参考

http://www.postgresql.org/docs/9.2/static/runtime-config-connection.html

原创文章,作者:745907710,如若转载,请注明出处:https://blog.ytso.com/237954.html

(0)
上一篇 2022年1月29日
下一篇 2022年1月29日

相关推荐

发表回复

登录后才能评论