Manjaro系统中pg_hba.conf位置及PostgreSQL本地连接问题
兄弟,你这个问题我之前在Arch系系统上也碰到过,核心是PostgreSQL在Manjaro这类Arch衍生系统上安装后不会自动初始化数据库集群,这才导致你找不到pg_hba.conf、连不上服务的!我给你一步步捋清楚解决办法:
1. 先处理服务未启动的问题
你看到的错误提示:
psql: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/run/postgresql/.s.PGSQL.5432"?
本质是PostgreSQL服务根本没启动,所以那个Unix套接字文件不存在。先检查服务状态:
sudo systemctl status postgresql
如果显示inactive,先停止可能异常的服务(如果有的话):
sudo systemctl stop postgresql
2. 初始化数据库集群(关键步骤!)
Arch系的PostgreSQL包安装后不会自动生成数据库集群,这就是你找不到pg_hba.conf的原因——只有初始化后才会在数据目录生成真实的配置文件。执行以下命令:
sudo -u postgres initdb -D /var/lib/postgresql/data
这个命令会以postgres用户身份初始化数据目录/var/lib/postgresql/data,完成后你就能在这个目录里找到pg_hba.conf、postgresql.conf这些核心配置文件了。
3. 配置本地连接权限
编辑pg_hba.conf文件来允许本地连接:
sudo nano /var/lib/postgresql/data/pg_hba.conf
找到本地连接的配置段,把对应的行修改为(根据你的需求选一种):
- 允许本地无密码连接(适合测试):
local all all trust - 要求密码验证(更安全):
local all all md5
修改后按Ctrl+O保存,Ctrl+X退出编辑器。
4. 重启服务并验证连接
重启PostgreSQL服务让配置生效:
sudo systemctl restart postgresql
设置开机自启(可选但推荐):
sudo systemctl enable postgresql
现在尝试本地连接:
psql -U postgres
如果是trust配置的话直接就能进入PostgreSQL命令行;如果是md5配置,输入postgres用户的密码即可(初始化后默认没密码,你可以用ALTER USER postgres PASSWORD '你的密码';设置)。
为什么之前找不到pg_hba.conf?
你找到的/usr/share/postgresql/pg_hba.conf.sample只是包自带的模板文件,不是实际生效的配置。只有当你用initdb初始化数据库集群后,才会在数据目录生成可编辑的真实配置文件。
内容的提问来源于stack exchange,提问作者Piko Monde

