psql连接数据库报错-could not connect to server No such file or directory

目录

1、问题描述

2、解决方案

(1)首先确认数据库服务是否已经启动。

(2)若数据库服务正常,查看配置文件,端口号是否正确。 

(3)若.s.PGSQL.nnnn的套接字文件(nnnn是数据库服务的端口号)被误删除,将.s.PGSQL.nnnn.lock删除后,使用pg_ctl restart -m f 命令重启数据库即可。 


1、问题描述

使用psql连接数据库报错:

2、解决方案

(1)首先确认数据库服务是否已经启动。

ps -ef |grep postgres highgo 

若数据库服务正常,检查unix_socket_directories参数。

su - highgo   $ cat $PGDATA/postgresql.conf  |grep unix_socket_directories   $ cat  $PGDATA/postgresql.auto.conf|grep unix_socket_directories

查看参数unix_socket_directories的值,若参数并非默认的“/tmp”目录,则连接数据库时需要添加“-h 目录”参数。

例如:

 

若依然报错,需要查看该目录下是否存在“.s.PGSQL.5866”文件,若不存在,查看数据库系统日志,分析具体原因。

### 解决 psql 无法连接到 PostgreSQL 服务器的问题 当遇到 `psql: could not connect to server: No such file or directory` 的错误时,通常是因为 PostgreSQL 服务器未运行或未正确配置以接受本地 Unix 域套接字连接。以下是可能的原因及解决方案: #### 检查 PostgreSQL 服务是否运行 确保 PostgreSQL 服务正在运行。可以通过以下命令检查服务状态: ```bash sudo systemctl status postgresql ``` 如果服务未运行,可以尝试启动服务: ```bash sudo systemctl start postgresql ``` 此外,确保服务设置为开机自启[^2]: ```bash sudo systemctl enable postgresql ``` #### 验证 Unix 域套接字路径 默认情况下,PostgreSQL 使用 `/tmp/.s.PGSQL.5432` 作为 Unix 域套接字路径。如果此文件不存在,则可能是配置文件中指定了不同的路径。检查 PostgreSQL 的配置文件 `postgresql.conf` 中的 `unix_socket_directories` 参数: ```bash grep unix_socket_directories /etc/postgresql/12/main/postgresql.conf ``` 如果路径不同,可以手动修改为 `/tmp` 或其他期望的目录[^1]。 #### 确认监听地址和端口 检查 `postgresql.conf` 文件中的 `listen_addresses` 和 `port` 参数。确保服务器监听本地地址并使用正确的端口(通常是 5432): ```bash listen_addresses = 'localhost' port = 5432 ``` 同时,验证 `pg_hba.conf` 文件中是否有允许本地连接的规则。例如,添加以下行以允许 Unix 域套接字连接: ```plaintext local all all trust ``` 完成后,重启 PostgreSQL 服务以应用更改: ```bash sudo systemctl restart postgresql ``` #### 测试连接 使用以下命令测试与 PostgreSQL 的连接: ```bash psql -U postgres -h /tmp ``` 如果仍然无法连接,请检查系统日志以获取更多信息: ```bash sudo journalctl -u postgresql.service ``` --- ### 示例代码:验证 PostgreSQL 配置 以下是一个简单的脚本,用于检查 PostgreSQL 的运行状态和配置: ```bash #!/bin/bash # 检查 PostgreSQL 服务状态 echo "Checking PostgreSQL service status..." systemctl status postgresql # 检查 Unix 域套接字路径 echo "Checking Unix socket path..." if [ -e /tmp/.s.PGSQL.5432 ]; then echo "Socket exists at /tmp/.s.PGSQL.5432" else echo "Socket does not exist at /tmp/.s.PGSQL.5432" fi # 显示监听地址和端口 echo "Displaying listen_addresses and port from postgresql.conf..." grep -E '^(listen_addresses|port)' /etc/postgresql/12/main/postgresql.conf ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值