与 postgres uri 和特殊字符的 psql 连接
psql connection with postgres uri and special character
我在 docker 中摆弄 postgres,想通过 url URI 连接到它。
如果密码包含可以转换为字符的子字符串,感谢 decodeURIComponent
,它也会被处理,导致连接失败。
是否可以在 uri 中指定一些不应被视为要解码的特殊字符的字符?
这是一个例子:
%23
自动编码为 #
$> docker run --name test -p 5433:5432 -e POSTGRES_USER=user -e POSTGRES_DB=db -e POSTGRES_PASSWORD=secret%23 --rm -d postgres
$> psql postgres://user:secret%23@localhost:5433/db
psql: error: could not connect to server: FATAL: password authentication failed for user "user"
$> PGPASSWORD=secret%23 psql --user=user --host=localhost --port=5433 --dbname=db
psql (12.3, server 13.2 (Debian 13.2-1.pgdg100+1))
WARNING: psql major version 12, server major version 13.
Some psql features might not work.
Type "help" for help.
db=#
工作示例(没有百分比后跟两位数):
$> docker run --name test2 -p 5434:5432 -e POSTGRES_USER=user -e POSTGRES_DB=db -e POSTGRES_PASSWORD=secret# --rm -d postgres
$> psql postgres://user:secret%23@localhost:5434/db
psql (12.3, server 13.2 (Debian 13.2-1.pgdg100+1))
WARNING: psql major version 12, server major version 13.
Some psql features might not work.
Type "help" for help.
db=#
$> PGPASSWORD=secret# psql --user=user --host=localhost --port=5434 --dbname=db
psql (12.3, server 13.2 (Debian 13.2-1.pgdg100+1))
WARNING: psql major version 12, server major version 13.
Some psql features might not work.
Type "help" for help.
db=#
psql postgres://user:secret%23@localhost:5433/db
不适用于密码设置为 secret%23
但密码设置为 secret#
。
是否可以像 secret%23
这样使用带有密码的数据库 uri?
doc 表示必须对连接 URI 进行编码,因此您的 %23
值必须编码为 %2523
。
我在 docker 中摆弄 postgres,想通过 url URI 连接到它。
如果密码包含可以转换为字符的子字符串,感谢 decodeURIComponent
,它也会被处理,导致连接失败。
是否可以在 uri 中指定一些不应被视为要解码的特殊字符的字符?
这是一个例子:
%23
自动编码为 #
$> docker run --name test -p 5433:5432 -e POSTGRES_USER=user -e POSTGRES_DB=db -e POSTGRES_PASSWORD=secret%23 --rm -d postgres
$> psql postgres://user:secret%23@localhost:5433/db
psql: error: could not connect to server: FATAL: password authentication failed for user "user"
$> PGPASSWORD=secret%23 psql --user=user --host=localhost --port=5433 --dbname=db
psql (12.3, server 13.2 (Debian 13.2-1.pgdg100+1))
WARNING: psql major version 12, server major version 13.
Some psql features might not work.
Type "help" for help.
db=#
工作示例(没有百分比后跟两位数):
$> docker run --name test2 -p 5434:5432 -e POSTGRES_USER=user -e POSTGRES_DB=db -e POSTGRES_PASSWORD=secret# --rm -d postgres
$> psql postgres://user:secret%23@localhost:5434/db
psql (12.3, server 13.2 (Debian 13.2-1.pgdg100+1))
WARNING: psql major version 12, server major version 13.
Some psql features might not work.
Type "help" for help.
db=#
$> PGPASSWORD=secret# psql --user=user --host=localhost --port=5434 --dbname=db
psql (12.3, server 13.2 (Debian 13.2-1.pgdg100+1))
WARNING: psql major version 12, server major version 13.
Some psql features might not work.
Type "help" for help.
db=#
psql postgres://user:secret%23@localhost:5433/db
不适用于密码设置为 secret%23
但密码设置为 secret#
。
是否可以像 secret%23
这样使用带有密码的数据库 uri?
doc 表示必须对连接 URI 进行编码,因此您的 %23
值必须编码为 %2523
。