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

标签 database postgresql backup postgresql-9.3

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

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

相关文章:

mysql - 备份 MySql 数据库并在某个时间通过电子邮件将它们发送到某个地方

MySQL 拒绝多个用户访问

java - 为什么不建议在 Hibernate 中使用 "hibernate.connection.autocommit = true"?

java - 将参数传递给 java 准备语句

ruby-on-rails - 修剪字符尾随的零 n 轨

Mysql 备份 .bat 文件在服务器上返回一个 1kb 的 sql 文件

mysql - 获取每个订单的成本和时间

database - oracle新创建的用户权限问题?

sql - 一个值出现的次数(sql)

ubuntu - VirtualBox - 克隆与快照与备份