PostgreSQL连接失败:无法登录用户以安装PostGIS扩展
解决PostgreSQL用户密码认证失败及PostGIS扩展安装问题
一、排查密码认证失败的核心问题
1. 修复密码特殊字符的shell解析问题
你设置的密码pa$$word包含shell特殊字符$$,执行CREATE USER命令时,shell会自动将$$解析为空字符串,导致实际生效的密码是paord而非预期值。重新设置密码时,用美元引号避免shell解析:
-- 以超级用户(如postgres)身份连接数据库后执行 ALTER USER san WITH PASSWORD $$pa$$word$$;
也可以先改用无特殊字符的简单密码测试:
ALTER USER san WITH PASSWORD 'simple123';
2. 调整pg_hba.conf的远程认证规则
由于你使用-h [database_hostname]发起远程连接,PostgreSQL的pg_hba.conf配置可能限制了远程连接的认证方式:
- 找到
pg_hba.conf文件(通常位于/var/lib/postgresql/<版本号>/main/或PostgreSQL安装目录的data文件夹内) - 添加或修改远程连接规则,将认证方式改为
scram-sha-256(PostgreSQL 10+版本推荐)或md5:# 允许任意主机的san用户连接usersDB,使用密码认证 host usersDB san 0.0.0.0/0 scram-sha-256 - 重启PostgreSQL服务使配置生效:
# 系统d环境 sudo systemctl restart postgresql # 或service命令 sudo service postgresql restart
3. 验证连接参数准确性
- 默认PostgreSQL端口为
5432,你指定的8000需与postgresql.conf里的port配置一致 - 确认数据库主机地址无误,且目标主机防火墙已开放对应端口
4. 修正创建用户时的命令拼写错误
你原命令存在一处笔误:LTER ROLE san SET client_encoding TO 'utf8'; 缺少字母A,正确命令应为:
ALTER ROLE san SET client_encoding TO 'utf8';
二、认证成功后安装PostGIS扩展
连接到usersDB数据库后执行扩展创建命令:
# 先进入psql交互界面 psql -h [database_hostname] -p 8000 -U san -d usersDB # 在交互界面执行扩展创建 CREATE EXTENSION postgis;
也可直接一次性执行:
psql -h [database_hostname] -p 8000 -U san -d usersDB -c "CREATE EXTENSION postgis;"
内容的提问来源于stack exchange,提问作者Alexander Life
相关产品推荐
相关产品推荐

