gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:14 39 4
gpt4 key购买 nike

我正在尝试使用 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 表示 进程 ID 为 8555 的后台作业 #4 已启动
字符串周围的单引号允许“按原样”解释它,无需参数替换和其他特殊字符解释。

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

有几个例子:

$ echo abc&defgh[1] 3426abcdefgh: 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&\ndefgh2: abc&defgh

关于database - Postgres数据库备份错误-密码中的特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56196491/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com