我正在尝试使用存储过程从 PostgreSQL 执行 pg_dump 命令。我的设置使用 EXECUTE 格式来动态构建命令。这是相关代码:
'COPY (SELECT 1) TO PROGRAM ''script -c "PGPASSWORD=%s pg_dump -h %s -p %s -U %s -Z6 -Fc -v -d %s -t %s -f %s%s.sql" %s%s_log.txt''',
ppassword, phost, pport, pusername, pdbname, atablename, pdumppath, atablename, plogdumppath, atablename
);
使用用户名和密码“postgres”可以正常工作。 但是,当 ppassword 值包含特殊字符(如 @ddG$fG#2@91)并且我执行此操作时,出现以下错误:
FATAL: password authentication failed for user "user_name"
connection to server at "ip_address", port xxxx failed:
FATAL: password authentication failed for user "user_name"
我已确认以下事项:
用户名、主机、端口、数据库名、表名均正确,并且与“postgres”用户具有相同的权限。 在 PGPASSWORD 环境变量中手动使用或使用 psql 登录时,密码可以正常工作。 问题似乎出在密码中的特殊字符。
Postgresql 版本:16。
在这种情况下如何正确地将这样的密码传递给 pg_dump 命令?
您的程序以系统用户“postgres”运行,无需进行身份验证即可运行 pg_dump 您已经是数据库超级用户。
只需在命令中保留用户名和密码即可。