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

执行PostgreSQL查询命令报语法错误的原因与解决方法

问题原因

命令报错的核心是Shell单引号嵌套冲突:

  • 你用单引号包裹了su -c要执行的整条psql命令
  • 但SQL语句中interval '24 hour'、'lastHourAggr'两处直接使用了单引号,Shell解析时会把interval后的第一个单引号识别为外层单引号块的闭合标记,后续所有引号匹配全部错位,最终抛出「找不到匹配双引号」「意外到达文件结尾」的语法错误。

存在问题的原命令如下:

su postgres -c 'psql -d ovirt_engine_history -c " UPDATE history_configuration set var_datetime = var_datetime - interval '24 hour' WHERE var_name = 'lastHourAggr' "'
修正方案

提供两种可直接运行的正确写法,二选一即可:

  • 调整引号层级,外层用双引号包裹su -c的执行内容,内层psql的SQL参数用转义双引号包裹,SQL内部的单引号无需额外处理:
    su postgres -c "psql -d ovirt_engine_history -c \"UPDATE history_configuration set var_datetime = var_datetime - interval '24 hour' WHERE var_name = 'lastHourAggr'\""
    
  • 保留外层单引号结构,对SQL内部的单引号做Shell转义(单引号块内插入字面单引号的固定写法为'\''):
    su postgres -c 'psql -d ovirt_engine_history -c "UPDATE history_configuration set var_datetime = var_datetime - interval '\''24 hour'\'' WHERE var_name = '\''lastHourAggr'\''"'
    

提示:正式执行UPDATE语句前,可先把SQL替换为SELECT语句做校验,避免误改生产数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 07:01:25