使用PostgreSQL URL连接字符串,格式为:
postgresql://user:secret@localhost
我如何处理字符串中的特殊字符(例如,$),以便在连接到postgres数据库时它能够正常工作?我尝试了简单的URL编码,例如,“test$”变成了“test%24”…但这似乎是一个问题,因为我得到了一个“致命的:密码验证失败”错误。
oewdyzsn1#
请参见文档中的连接URI。你的问题中有几点似乎不太对:
9.2
9.1
百分比编码可以用于在任何URI部分中包括具有特殊含义的符号。
尝试使用9.3:sql> alter user daniel password 'p$ass';
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'
如预期失败:密码错误。
pnwntuvh2#
也许你的输入shell有不同的编码,$不是%24。在https://www.urlencoder.org/上查看提示:如果你使用alter user "username" password 'p$ass''word'来设置/更改密码,单引号必须用另一个单引号来屏蔽。
$
%24
alter user "username" password 'p$ass''word'
qyswt5oh3#
在处理URI方案中的保留字符时,必须理解它们在特定上下文中的特殊含义。如果URI方案要求将保留字符用于其他目的,则必须对该字符进行百分比编码。对保留字符进行百分比编码涉及将其转换为ASCII中相应的字节值,然后将该值表示为一对十六进制数字。然后这些数字前面加上百分号(“%”),并在URI中使用,而不是保留字符。例如,假设保留字符是“!并且URI方案要求其用于特定目的。如果要包含字符“!“,则需要对它进行百分比编码。的百分比编码表示形式“!”将是“%21”。
如果您的密码是ABCD@123,则postgres连接url如下所示,
postgresql://username:ABCD%40123@host:port/database
3条答案
按热度按时间oewdyzsn1#
请参见文档中的连接URI。
你的问题中有几点似乎不太对:
9.2
版本开始支持URI,所以对于9.1
客户端来说,这根本不应该工作。或者您使用的客户端本身实现了连接URI。百分比编码可以用于在任何URI部分中包括具有特殊含义的符号。
尝试使用9.3:
sql> alter user daniel password 'p$ass';
作品
作品
如预期失败:密码错误。
pnwntuvh2#
也许你的输入shell有不同的编码,
$
不是%24
。在https://www.urlencoder.org/上查看提示:如果你使用
alter user "username" password 'p$ass''word'
来设置/更改密码,单引号必须用另一个单引号来屏蔽。qyswt5oh3#
在处理URI方案中的保留字符时,必须理解它们在特定上下文中的特殊含义。如果URI方案要求将保留字符用于其他目的,则必须对该字符进行百分比编码。
对保留字符进行百分比编码涉及将其转换为ASCII中相应的字节值,然后将该值表示为一对十六进制数字。然后这些数字前面加上百分号(“%”),并在URI中使用,而不是保留字符。
例如,假设保留字符是“!并且URI方案要求其用于特定目的。如果要包含字符“!“,则需要对它进行百分比编码。的百分比编码表示形式“!”将是“%21”。
如果您的密码是ABCD@123,则postgres连接url如下所示,