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

远程PSQL执行含大小写敏感对象的SQL语句失败求助

解决PostgreSQL远程执行SQL时大小写敏感表/列名的问题

问题核心是shell会解析你外层双引号内的双引号,导致PostgreSQL实际收到的SQL里没有正确包裹表名和列名的双引号,自然无法识别大小写敏感的对象。

正确写法一:转义双引号

在shell的双引号字符串内,用反斜杠\转义SQL里的双引号,这样shell会把这些双引号完整传递给psql:

PGPASSWORD=$secret psql -h $dbip -p $port -d $db -U $dbuser -c "UPDATE \"AO_4AEACD_WEBHOOK_DAO\" set \"URL\" = 'https://testy.com' WHERE \"URL\" ='https://test.com';"

正确写法二:用单引号包裹SQL内容

如果不想用反斜杠转义,可以用单引号把整个SQL语句包起来,同时把SQL里的单引号替换成两个连续单引号(PostgreSQL识别这种写法为单个单引号):

PGPASSWORD=$secret psql -h $dbip -p $port -d $db -U $dbuser -c 'UPDATE "AO_4AEACD_WEBHOOK_DAO" set "URL" = ''https://testy.com'' WHERE "URL" =''https://test.com'';'

注意:这种写法下,shell不会解析单引号内的变量,所以如果你的SQL里需要引用shell变量,得把变量部分放在单引号外面拼接。

之前写法失败的原因

  • 第一种失败写法:"UPDATE "AO_4AEACD_WEBHOOK_DAO"..."
    shell会把第一个"视为字符串开始,第二个"视为字符串结束,AO_4AEACD_WEBHOOK_DAO会被当成独立的命令参数,直接导致shell语法错误。
  • 第二种失败写法:UPDATE '"AO_4AEACD_WEBHOOK_DAO"'
    传递给PostgreSQL的SQL里,表名被单引号包裹了,PostgreSQL会把它当成字符串常量,而非表名,自然找不到对应的表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 12:57:20