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

含@符号的密码如何用psql --dbname连接PostgreSQL并执行SQL脚本

PostgreSQL连接时密码含@符号的解决方法

连接字符串里的@是用来分隔「用户名:密码」和「主机地址」的特殊字符,所以密码里的@会导致psql错误拆分连接参数,以下是几种无需手动输入密码的解决方法:

方法1:URL编码密码中的@符号

把密码里的每个@替换成URL编码值%40,这样psql就能正确解析连接字符串:

psql --dbname=postgresql://postgres:z987xSst%40%40gres@ip:5432/postgres -A -t -q -f ./my_test.sql

原密码z987xSst@@gres里的两个@分别替换为%40,避免了连接参数被错误拆分。

方法2:通过PGPASSWORD环境变量传递密码

直接在命令前设置环境变量,不用在连接字符串里写密码:

PGPASSWORD='z987xSst@@gres' psql --dbname=postgresql://postgres@ip:5432/postgres -A -t -q -f ./my_test.sql

psql会自动读取PGPASSWORD环境变量的值作为连接密码,无需处理特殊字符。

方法3:用pgpass配置文件实现持久化免密

如果需要长期使用免密连接,可在Linux端创建~/.pgpass文件,写入以下内容(替换成你的实际参数):

ip:5432:postgres:postgres:z987xSst@@gres

然后必须设置文件权限为600(psql要求文件不能被其他用户读取):

chmod 600 ~/.pgpass

之后直接用简化命令即可执行脚本:

psql --dbname=postgresql://postgres@ip:5432/postgres -A -t -q -f ./my_test.sql

pgpass文件会自动匹配对应主机、端口、数据库和用户名,自动填入密码。

内容的提问来源于stack exchange,提问作者sheng yan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 01:54:53