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

Grafana自定义SQL变量含文本字面量时查询失败问题求助

解决Grafana自定义SQL变量转义单引号的问题

以下是针对你遇到的Grafana变量自动转义单引号导致PostgreSQL查询失败的解决方案:

方案1:使用变量的原始输出模式

在面板的SQL查询中,将变量引用从${custom_sql}改为${custom_sql:raw}。这个后缀会强制Grafana直接输出变量的原始内容,不会对单引号等特殊字符进行转义处理。

示例修改后的查询:

${custom_sql:raw}

测试带单引号的语句时,Grafana会直接传递SELECT * FROM users WHERE username = 'someUsername'给PostgreSQL,不会添加额外的单引号。

方案2:调整变量的全局格式设置

进入仪表盘的变量管理页面(Dashboard Settings → Variables),找到custom_sql变量:

  • 在变量设置的“Format”下拉菜单中,选择“Raw”(默认可能为“Auto”或“SQL”);
  • 保存变量配置后,重新测试查询,此时变量输出会保持原始字符串格式。

方案3:备选:拆分变量并用PostgreSQL函数处理(适合复杂场景)

如果无法直接传递完整SQL片段,可以将查询条件拆分为字段和值两个独立变量,然后用PostgreSQL的quote_literal()函数安全处理文本值:

  1. 创建两个变量:filter_field(存储字段名,如username)和filter_value(存储值,如someUsername);
  2. 面板中使用如下查询:
SELECT * FROM users WHERE ${filter_field:raw} = quote_literal(${filter_value:raw})

这个方法既避免了单引号转义问题,还能一定程度降低SQL注入风险,但需要修改Telegram Bot的请求处理逻辑,拆分用户输入的SQL。

注意事项

  • 使用Raw模式时,要严格控制SQL请求的来源,避免恶意SQL注入;
  • 可以通过Grafana的“Query Inspector”查看实际发送给数据库的SQL语句,验证转义问题是否解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 12:15:01