You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

psql连接PostgreSQL数据库时特殊符号密码转义失败报错咨询

psql密码含特殊符号连接失败解决方案

报错原因

你遇到的报错是两个问题叠加导致的:

  1. 双引号包裹密码段时,shell会解析内部的转义符,破坏连接URI的结构
  2. postgres连接URI要求特殊字符必须做URL百分号编码,未编码的@会被psql误识别为用户名和主机名的分隔符,导致后续密码内容被当成主机名解析,触发无法解析主机的报错。

解决方案

方案1:优先使用参数传递(无转义成本,最稳妥)

交互模式

直接执行带参数的psql命令,回车后手动输入密码,完全不需要处理转义:

psql -h HOST -p 5432 -U USERNAMER -d DB_NAME -W

非交互脚本模式

用单引号包裹密码赋值给PGPASSWORD环境变量,单引号内的所有字符会被shell原样传递,不需要额外转义:

PGPASSWORD='@efszP&\39D7"d_' psql -h HOST -p 5432 -U USERNAMER -d DB_NAME

方案2:使用连接URI格式(需先做URL编码)

先对原密码@efszP&\39D7"d_的特殊字符做百分号编码:

  • @编码为%40
  • &编码为%26
  • \编码为%5C
  • "编码为%22

编码后的密码为:%40efszP%26%5C39D7%22d_
直接代入连接URI即可,不需要额外加引号或转义符:

psql postgres://USERNAMER:%40efszP%26%5C39D7%22d_@HOST:5432/DB_NAME

安全建议

生产环境不要将明文密码写在命令行中,会被进程列表工具获取到。建议配置.pgpass文件存储密码:

  1. 在用户根目录新建.pgpass文件,写入内容:
HOST:5432:DB_NAME:USERNAMER:@efszP&\39D7"d_
  1. 设置文件权限为仅当前用户可读:chmod 600 ~/.pgpass
    配置完成后直接执行psql -h HOST -p 5432 -U USERNAMER -d DB_NAME即可自动读取密码登录。

内容的提问来源于stack exchange,提问作者Eyal Solomon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 02:18:04