使用以下格式的 Postgresql URL 连接字符串:
postgresql://user:secret@localhost
如何处理该字符串中的特殊字符(例如,$),以便它在连接到我的 postgres 数据库时真正起作用?
我尝试过简单地对其进行 URL 编码,例如,“test$”变为“test%24”...但这似乎是一个问题,因为在尝试使用时出现“致命:密码身份验证失败”错误它。
请参阅文档中的连接 URI。
您的问题中有几处似乎不太正确:
9.2
起,postgres 仅支持
URI,因此对于9.1
客户端来说根本不应该工作。或者您使用的客户端本身实现连接 URI。支持百分号编码。每个文档:
百分比编码可用于包含具有特殊含义的符号 在任何 URI 部分中。
对于美元字符来说甚至不需要百分比编码。
尝试过9.3:
sql> alter user daniel password 'p$ass';
$ psql 'postgresql://daniel:p$ass@localhost/test'
有效
$ psql 'postgresql://daniel:p%24ass@localhost'
有效
psql 'postgresql://daniel:pass@localhost/test'
如预期失败:密码错误。
也许您的输入 shell 有不同的编码,并且
$
不是 %24
。
在 https://www.urlencoder.org/ 上查看
提示: 如果您使用
alter user "username" password 'p$ass''word'
设置/更改密码,
单引号必须用另一个单引号屏蔽。
处理 URI 方案中的保留字符时,必须了解它们在特定上下文中的特殊含义。如果 URI 方案强制使用保留字符用于不同目的,则有必要对该字符进行百分比编码。
对保留字符进行百分比编码涉及将其转换为相应的 ASCII 字节值,然后将该值表示为一对十六进制数字。这些数字前面带有百分号 (“%”),并在 URI 中使用,而不是保留字符。
例如,假设保留字符是“!”并且 URI 方案需要其用于特定目的。如果你想包含字符“!”在出于不同目的的 URI 中,您需要对其进行百分比编码。 “!”的百分比编码表示形式将是“%21”。
如果您的密码是 ABCD@123 那么 postgres 连接 URL 如下所示,
postgresql://username:ABCD%40123@host:port/database
您可以在浏览器控制台中使用 encodeURI:
对此类网址进行编码例如获取 pg_dump 命令:
var pghost = encodeURI(`${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME}`);
var pgdump = `pg_dump --dbname=postgresql://${pghost}`;
console.log(pgdump);