使用postgres pg_dump命令时,转义包含@的密码

时间:2017-06-15 07:32:35

标签: postgresql shell

我正在使用postgres,我创建了db,user,password,这是密码:

密码= name&text@sob

我正在使用以下命令来转储数据库,它可以在我拥有的其他数据库上运行:

pg_dump -Fc --no-acl --no-owner --dbname=postgresql://db_user:password@127.0.0.1:5432/db_name

但使用包含&@的密码的数据库时,它不起作用:

pg_dump -Fc --no-acl --no-owner --dbname=postgresql://db_user:name&text@sob@127.0.0.1:5432/db_name

由于密码中的&@

无法正常工作 - 所以我使用&转义\,但它不适用于{{1} - 任何建议?

由于

2 个答案:

答案 0 :(得分:4)

添加?password=name%26te‌​xt%40sob作为uri参数应该执行:

pg_dump -Fc --no-acl --no-owner --dbname=postgresql://db_user:password@127.0.0.1:5432/db_name?password=name%26te‌​xt%40sob

根据https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

  

URI的层次结构部分的组成部分也可以给出   参数。

<强>更新

正如Roko所注意到的,网址必须是encoded

答案 1 :(得分:1)

您可以直接在连接字符串中对符号进行编码,无需使用额外的URL参数。

--dbname=postgresql://db_user:name%26te‌​xt%40sob@127.0.0.1:5432/db_nam‌​e