You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中正确操作Ubuntu服务器Docker容器内的PostgreSQL?

问题解决方法

问题根源

你的命令出现两个核心问题:

  1. 参数传递混乱:PowerShell、plink、远程bash三层环境的引号解析冲突,导致psql的SQL命令被拆分成零散参数,甚至把服务器目录内容误当作psql的输入参数。
  2. 笔误:命令中- 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:23:13