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

通过SSH远程执行psql查询时的引号问题求助

解决SSH远程执行psql带引号查询的问题

你的问题核心是本地Shell解析引号时提前拆分了远程命令,导致psql的-c参数只获取到部分查询语句,后续内容被当成多余参数。以下是几种可行的解决方法:

方法1:转义内部双引号

在本地命令中,把psql查询语句的双引号用反斜杠\转义,让本地Shell不会提前闭合外层双引号:

ssh user@host "psql -U USER -d DATABASE -c \"select A,B,C from TABLE where A='string1';\""

方法2:改用单引号包裹远程命令

用单引号包裹整个远程执行的命令,避免本地Shell解析内部引号。如果查询里有单引号,可以用'\''来转义(bash语法),或者利用PostgreSQL支持的双单引号写法:

方式A:转义单引号

ssh user@host 'psql -U USER -d DATABASE -c "select A,B,C from TABLE where A='\''string1'\'';"'

方式B:PostgreSQL双单引号写法

把查询里的'string1'改成''string1'',这样可以直接用单引号包裹整个命令:

ssh user@host 'psql -U USER -d DATABASE -c '\''select A,B,C from TABLE where A=''string1'';'\'''

方法3:通过本地脚本传递查询

如果查询逻辑复杂,建议把查询写到本地SQL脚本中,再通过SSH标准输入传递给psql:

  1. 创建本地脚本query.sql:
select A,B,C from TABLE where A='string1';
  1. 执行远程命令:
ssh user@host "psql -U USER -d DATABASE -f -" < query.sql

错误原因说明

你之前的命令ssh user@host "psql -U USER -d DATABASE -c "select ...""中,本地Shell遇到第二个双引号时就会闭合外层的双引号,导致远程Shell收到的命令被拆分成不完整的片段。实际执行时,-c只拿到了"select,后面的A,B,C等都被当成psql的额外参数,因此出现忽略提示。而ssh user@host "psql -U USER -d DATABASE -c '\l'"能运行,是因为内部用了单引号,外层双引号没有被提前闭合,远程Shell收到的是完整的-c '\l'参数。

内容的提问来源于stack exchange,提问作者darthV

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 22:45:39