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

如何解决bash脚本中的pg_dump主机名解析错误

PostgreSQL pg_dump脚本DNS解析失败问题求助

免责声明

  • 非数据库管理员(DBA)
  • 非系统管理员
  • 无特权用户权限
  • 不精通psql/PostgreSQL
  • 无安装软件/补丁权限
  • 无pgadmin使用权限
  • 无ping命令权限
  • 无修改pg_hba.conf、/etc/nsswitch.conf、/etc/hosts等系统文件的权限

工作环境

通过Windows 10远程桌面(RDC)连接到RHEL9远程系统,仅能使用命令行界面(CLI);脚本中明文存放密码仅用于测试。

软件版本

  • PostgreSQL 16.4(x86_64-pc-linux-gnu平台,gcc 7.3.1编译,64位)
  • pg_dump (PostgreSQL) 17.5

脚本内容

servera=<serverA_address>
serverb=<serverB_address>
serverc=<serverC_address>
serverd=<serverD_address>
port=5432
database=postgres
user=<user_name>
PGPASSWORD=<password>
dtg=$(date "%Y-%m-%d")
export PGPASSWORD
pg_dump -U ${user} -h ${servera} -p ${port} -d ${database} -F t > ${dtg}_serverAdump.tar
pg_dump -U ${user} -h ${serverb} -p ${port} -d ${database} -F t > ${dtg}_serverBdump.tar
pg_dump -U ${user} -h ${serverc} -p ${port} -d ${database} -F t > ${dtg}_serverCdump.tar
pg_dump -U ${user} -h ${serverd} -p ${port} -d ${database} -F t > ${dtg}_serverDdump.tar

终端错误输出

pg_dump: error: could not translate host name "<serverA_address>" to address: Name or service not known
pg_dump: error: could not translate host name "<serverB_address>" to address: Name or service not known
pg_dump: error: could not translate host name "<serverC_address>" to address: Name or service not known
pg_dump: error: could not translate host name "<serverD_address>" to address: Name or service not known

异常现象说明

直接在CLI中单独执行pg_dump命令可正常完成备份,且用nslookup和dig查询服务器地址均能正常解析:

nslookup输出

nslookup <serverA_address>
Server:     a.b.c.d
Address:    a.b.c.d#<port>
Non-authoritative answer:
Name:   <serverA_address>
Address:    a.b.c.d

dig输出

; <<>> Dig 9.16.23-RH <serverA_address>
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48340
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
; COOKIE <cookie_value> (good)
;; QUESTION SECTION:; <serverA_address>. IN A
;; ANSWER SECTION: <serverA_address>. 5 IN A <serverA_ip_address>
;; Query time: 7 msec
;; SERVER: <serverA_ip_address>#<port>
(<serverA_ip_address>)
;; WHEN: Wed Jun 18 <etc>
;; MSG SIZE  rcvd: 138

排查方向建议

  1. 检查脚本与手动执行的环境变量差异:在脚本开头添加env | grep -i dns和echo $PATH,对比手动执行命令时的输出,确认是否存在DNS相关环境变量缺失或路径不一致的情况。
  2. 验证跨版本兼容性:当前pg_dump版本(17.5)高于PostgreSQL服务器版本(16.4),可尝试找到服务器对应版本的pg_dump路径并在脚本中指定,测试是否解决解析问题。
  3. 直接使用IP替代域名:在脚本中填写服务器IP地址,绕过DNS解析环节,验证是否为脚本内域名解析的问题。
  4. 添加解析调试步骤:在每个pg_dump命令前添加nslookup ${servera},确认脚本执行时是否能正常解析域名,同时检查变量是否存在拼写错误或隐藏特殊字符。
  5. 检查脚本编码与特殊字符:用cat -A 脚本文件名查看脚本内容,确认服务器地址变量行没有空格、制表符等隐藏特殊字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:43:10