Postgres数据库备份错误-密码中的特殊字符

Postgres database backup error - special character in password

我正在尝试使用 pg_dump 进行 PostgreSQL 备份。但由于以下错误,我无法接受它。

我已经成功备份了不同的 IP 地址 ,其中没有 特殊字符 @

已使用且有效的命令

sudo /usr/bin/pg_dump --file "/home/myusername/my_first_db.backup" \
  --verbose --format=t --blobs -v \
  --dbname postgresql://postgres:myfirstpassowrd@112.112.113.114:5432/my_first_db

命令已使用但不工作

sudo /usr/bin/pg_dump --file "/home/myuser/xyz_db/DB_BACKUP/db_file.backup" \
  --verbose --format=t --blobs -v  \
  --dbname postgresql://111.222.333.444:5432/prod_live?password=123th@123th4&user=postgres

sudo /usr/bin/pg_dump --file "/home/myuser/xyz_db/DB_BACKUP/db_file.backup" \
  --verbose --format=t --blobs -v  \
  --dbname postgresql://111.222.333.444:5432/prod_live?password=123th%40123th4&user=postgres

我得到的错误:

[4] 8555
myuser@myuser:~$ pg_dump: [archiver (db)] connection to database "prod_live" failed: FATAL:  password authentication failed for user "root"
FATAL:  password authentication failed for user "root"

我无法更改密码,因为它是生产。

如我所见...
命令行中未加引号的字符 & 将任务发送到后台,例如,此处:Linux: Start Command In Background。所以 & 字符之后的所有内容都被 *nix shell.
忽略(或解释为单独的命令) 解决方案
只需尝试像这样引用整个字符串:

sudo /usr/bin/pg_dump --file "/home/myuser/xyz_db/DB_BACKUP/db_file.backup" \
  --verbose --format=t --blobs -v  \
  --dbname 'postgresql://111.222.333.444:5432/prod_live?password=123th@123th4&user=postgres'

说明
在您提供的输出中,行 [4] 8555 表示 Background job #4 with process ID 8555 was started
字符串周围的单引号允许解释它 "as-is",无需参数替换和其他特殊字符解释。

PS:使用$'...'语法来翻译特殊转义字符,如\n \t \uxxxx等。

有几个例子:

$ echo abc&defgh
[1] 3426
abc
defgh: command not found
[1]+  Done                    echo abc

如您所见,输出类似于您在部分 [x] xxxx

中提供的
$ echo 'abc&defgh'
abc&defgh

在这种情况下,命令 echo 打印出您想要的内容
最后但同样重要的是:

$ echo '1: abc&\ndefgh'; echo $'2: abc&\ndefgh'
1: abc&\ndefgh
2: abc&
defgh