2017-06-15 84 views
4

我使用postgres的中号postgres的当含有@密码,我创建分贝,用户密码,这是密码:逃生用的pg_dump命令

密码= name&[email protected]

我使用下面的命令来转储数据库和它的作品在我的其他数据库,我有:

pg_dump -Fc --no-acl --no-owner --dbname=postgresql://db_user:[email protected]:5432/db_name

但如果使用DB含&@密码时它不工作:

pg_dump -Fc --no-acl --no-owner --dbname=postgresql://db_user:name&[email protected]@127.0.0.1:5432/db_name

不会因为受密码的&@的工作,所以我逃过了&\,但它并没有为@工作 - 有什么建议?

由于

回答

4

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

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

按照URI的分层部分的https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING

组件也可以被给定为 参数。

更新

为ROKO注意到,URL必须是encoded

+0

不工作 - 如果它是URL-不应在密码中输入'&'还需要转义?我认为它是'%26' – Roko

+0

是的 - 我错过了你有'&' –

+0

它可以工作,如果你转义密码参数,所以 'pg_dump -Fc --no-acl --no-owner --dbname = postgresql: // db_user:[email protected]:5432/db_name?password = name%26text%40sob' 如果你更正了你的答案,我会标记为正确的,Thx – Roko

1

您可以在连接字符串中直接编码的标志,没有必要用额外的URL参数打扰。

--dbname=postgresql://db_user:name%26te‌​xt%[email protected]:5432/db_nam‌​e