如何通过Unix套接字实现PgAdmin 4与本地PostgreSQL数据库的无密码连接
解决PgAdmin 4无密码通过Unix套接字连接PostgreSQL的问题
我明白你现在的困扰:psql能顺畅通过Unix套接字无密码连接数据库,但PgAdmin 4死活找不到正确的配置方式,还报fe_sendauth: no password supplied的错。其实PgAdmin 4是支持这种连接方式的,只是配置项需要注意细节,下面一步步教你搞定:
第一步:确认PostgreSQL的Unix套接字路径
首先得明确你的PostgreSQL Unix套接字存在哪里,执行下面的命令就能查到:
psql db_name -c 'show unix_socket_directories;'
你会得到类似这样的输出:
unix_socket_directories --------------------------------- /var/run/postgresql,/tmp (1 row)
记下其中一个路径就行,比如默认常用的/var/run/postgresql。
第二步:在PgAdmin 4里配置服务器连接
打开PgAdmin 4,点击左侧菜单栏的「Add New Server」(添加新服务器),然后按以下步骤配置:
- General标签页:随便给服务器起个好记的名字(比如你的数据库名
db_name)。 - Connection标签页:这是核心配置,一定要注意细节:
- Host name/address:别填
localhost或者127.0.0.1,直接填刚才查到的Unix套接字路径(比如/var/run/postgresql)。 - Port:可以留空,或者填默认的
5432(Unix套接字其实不需要端口,留空更准确)。 - Maintenance database:填你的数据库名
db_name,或者系统默认的postgres也可以。 - Username:填你的PostgreSQL用户名
user_name。 - Password:绝对不要填任何内容,也别勾选「Save password」选项。
- Host name/address:别填
- 点击「Save」保存配置,这时候应该就能成功连接了!
为什么之前会失败?
你之前可能习惯填localhost,这时候PgAdmin 4会尝试用TCP/IP协议连接,而不是Unix套接字。你的pg_hba.conf里只有local all all peer这条规则——local特指Unix套接字连接的认证方式,TCP连接会匹配其他规则(比如host开头的),那些规则大概率要求密码,所以才会触发报错。
额外排查项(如果还是连接失败)
如果按照上面的步骤还是不行,检查下面两点:
- 确认PgAdmin 4的运行用户和你的操作系统用户
user_name是同一个:比如桌面版PgAdmin 4默认会以当前登录用户运行,这就没问题;如果是服务器端的Web版PgAdmin 4(比如apt安装的),它可能以www-data用户运行,这时候需要调整pg_hba.conf,添加一条针对该用户的规则:
然后在local db_name user_name peer map=pgadmin_user/etc/postgresql/13/main/pg_ident.conf里添加用户映射:
最后重启PostgreSQL服务生效:pgadmin_user www-data user_namesudo systemctl restart postgresql@13-main - 再次验证psql的连接方式:执行
psql db_name -c 'show connection_type;',输出应该是unix,说明确实是通过Unix套接字连接的。
内容的提问来源于stack exchange,提问作者12345ieee
相关产品推荐
相关产品推荐

