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

Rok*_*oko 5 postgresql shell

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

密码= name&text@sob

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

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

但是在使用包含&和的密码的DB时它不起作用@:

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

由于密码&@密码不起作用- 所以我逃脱了&,\但它没有工作@- 任何建议?

谢谢

JGH*_*JGH 9

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

\n\n
--dbname=postgresql://db_user:name%26te\xe2\x80\x8c\xe2\x80\x8bxt%40sob@127.0.0.1:5432/db_nam\xe2\x80\x8c\xe2\x80\x8be\n
Run Code Online (Sandbox Code Playgroud)\n


Vao*_*sun 7

添加?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
Run Code Online (Sandbox Code Playgroud)

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

URI 的分层部分的组件也可以作为参数给出。

更新

正如 Roko 所注意到的,必须对 URL 进行编码