PowerShell中Liquibase无法读取带用户名密码的PostgreSQL JDBC连接串
问题原因
PowerShell 中 & 是内置的调用操作符,属于特殊控制字符。即使你将包含 & 的连接串放在单引号中,在传递参数给 liquibase 这类原生可执行程序时,PowerShell 仍会将 & 识别为命令分隔符,将 & 后的 password=secret 解析为独立的命令执行,因此出现两个报错:
- Liquibase 仅拿到
&之前的 URL 内容,缺少密码参数,连接数据库失败 - 系统将
password=xxx识别为未知命令,抛出可执行程序不存在的错误
解决方案
你可以选择以下任意一种方式规避转义问题:
- 对 URL 中的
&加 PowerShell 转义符
PowerShell 的默认转义符为反引号`,将连接串中的&替换为`&即可,示例命令:
liquibase history --url='jdbc:postgresql://host:port/database?user=user`&password=secret'
- 使用
--%停止解析标记(推荐)
PowerShell 提供了--%特殊标记,放在可执行程序的参数前时,PowerShell 不会再解析后续的特殊字符,直接将内容原样传递给目标程序,示例命令:
liquibase history --% --url="jdbc:postgresql://host:port/database?user=user&password=secret"
- 单独传递身份认证参数
也就是你目前正在使用的写法,将--user和--password作为独立参数传入,完全规避 URL 中的特殊字符问题,同时也更方便做敏感信息的脱敏处理,是官方优先推荐的写法:
liquibase history --url='jdbc:postgresql://host:port/database' --user='user' --password='secret'
内容的提问来源于stack exchange,提问作者Alexandru Antochi
相关产品推荐
相关产品推荐

