执行pg_basebackup命令报错:命令行参数过多(首个为20180319)
解决pg_basebackup报错:too many command-line arguments的问题
这个报错的根源很容易找到——你的命令里,-D参数的路径和date命令的输出之间多了一个空格,导致shell把它们拆成了两个独立的参数。
具体来说,你原命令的这部分写法有问题:
-D /var/lib/pgsql/10/backups/ `date +%Y%m%d`
/var/lib/pgsql/10/backups/后面的空格让shell认为-D的参数就到这里为止,而date +%Y%m%d输出的20180319被当成了一个额外的、pg_basebackup不识别的命令行参数,自然就触发了“too many command-line arguments”的报错。
修正后的命令
你只需要把路径和date命令的输出合并成一个完整的参数即可,推荐两种常用写法:
方式1:使用$()拼接路径(更易读,推荐)
pg_basebackup -U xxxxx -h xxxxx -p 5432 -D /var/lib/pgsql/10/backups/$(date +%Y%m%d) -X stream -P -v -Ft -z
方式2:用双引号包裹完整路径(更稳妥,适配路径含特殊字符的场景)
pg_basebackup -U xxxxx -h xxxxx -p 5432 -D "/var/lib/pgsql/10/backups/$(date +%Y%m%d)" -X stream -P -v -Ft -z
如果习惯用反引号语法,也要确保路径和反引号之间没有空格:
pg_basebackup -U xxxxx -h xxxxx -p 5432 -D /var/lib/pgsql/10/backups/`date +%Y%m%d` -X stream -P -v -Ft -z
执行修正后的命令后,-D会拿到完整的目标备份路径(比如/var/lib/pgsql/10/backups/20180319),pg_basebackup就能正常执行基础备份流程了。
内容的提问来源于stack exchange,提问作者Satish Ch
相关产品推荐
相关产品推荐

