我有一个 postgresql 表,其中包含一个名称字符串列。我在 grafana 仪表板中定义了一个变量,它采用搜索词关键字。我想过滤包含该子字符串变量的所有名称。
我尝试了3种方法都失败了。不确定,我做错了什么:
使用喜欢:
SELECT * FROM students WHERE name LIKE CONCAT(‘%’, $keyword, ‘%’)
使用位置:
SELECT * FROM students WHERE POSITION($keyword IN name) > 0;
使用STRPOS:
SELECT * FROM students WHERE STRPOS($keyword, name) > 0;
这些是我收到的错误: 情况1:
db query error: pq: syntax error at or near ","
案例2:
db query error: pq: syntax error at or near "IN"
案例3:
db query error: pq: syntax error at or near ","
在 grafana 面板中实现此功能的正确方法是什么?
您的问题是由于变量使用缺少引号引起的。正如官方文档所述,它们仅在某些有限的情况下添加:
从 Grafana 4.3.0 到 4.6.0,模板变量始终自动引用。如果您的模板变量是字符串,请勿将它们放在 where 子句中的引号中。
从 Grafana 4.7.0 开始,仅当模板变量是
时,模板变量值才会被引用。multi-value
我怀疑你使用的是古老版本的 Grafana,或者你有多重选择,因为你是按子字符串搜索的。
因此,在任何查询中使用
'$keyword'
而不是 $keyword
,一切都应该没问题。
为了简化此类问题的调查,Grafana 允许在所有替换发生后、发送到数据源之前查看最终查询。为此,请转到面板菜单:检查 > 查询,然后单击显示页面上的 Refresh。