如何在PowerShell中正确操作Ubuntu服务器Docker容器内的PostgreSQL?
问题解决方法
问题根源
你的命令出现两个核心问题:
- 参数传递混乱:PowerShell、plink、远程bash三层环境的引号解析冲突,导致
psql的SQL命令被拆分成零散参数,甚至把服务器目录内容误当作psql的输入参数。 - 笔误:命令中
- c的空格是错误的,正确写法应为-c(无空格),这个小错误会直接导致psql无法识别执行SQL的参数。
修复后的命令
方案1:用单引号包裹完整远程命令(推荐)
单引号会让远程bash把整个命令当作单一整体执行,避免参数拆分:
echo <password> | plink -no-antispoof user@server.de 'sudo docker exec dockercontainer psql -U "database" -c "SELECT * FROM vertrag;"'
方案2:转义双引号适配PowerShell解析
如果PowerShell对单引号处理有兼容性问题,可转义内部双引号:
echo <password> | plink -no-antispoof user@server.de "sudo docker exec dockercontainer psql -U `"database`" -c `"SELECT * FROM vertrag;`""
方案3:用Here-String简化引号处理
用PowerShell的Here-String构造命令,避免频繁转义:
$remoteCmd = @' sudo docker exec dockercontainer psql -U "database" -c "SELECT * FROM vertrag;" '@ echo <password> | plink -no-antispoof user@server.de $remoteCmd
补充说明
你之前执行脚本成功的原因是:脚本参数无空格和复杂字符串,远程bash能直接正确解析;但psql的SQL语句包含空格,必须通过整体引号包裹,才能保证命令在三层环境中传递时不被拆分。
内容的提问来源于stack exchange,提问作者Yannik Hermey
相关产品推荐
相关产品推荐

