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
我正在尝试使用 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