Grafana Postgres 使用可具有多个值的 Where 查询时出错

Posted

技术标签:

【中文标题】Grafana Postgres 使用可具有多个值的 Where 查询时出错【英文标题】:Grafana Postgres Error When Using Where Query That Can Have Multiple Values 【发布时间】:2021-03-03 09:36:36 【问题描述】:

我有一个从 PostgreSQL 数据库中提取的 Grafana 网站。在仪表板中,我正在尝试创建一个折线图,并在其中两列(项目和史诗)上设置了一个过滤器。过滤器适用于项目(可能是因为只有一个项目值,并且数据库中的所有行都设置了该值)。

但是当我尝试过滤“史诗”时,它只适用于单一选择。 “全部”选择​​给了我以下错误: pq: syntax error at or near ","

下面是我尝试配置此过滤器的屏幕截图。

另请注意,史诗与变量相关联,下面是我如何设置该变量的屏幕截图

编辑

请求生成的 SQL


  "request": 
    "url": "api/tsdb/query",
    "method": "POST",
    "data": 
      "from": "1577958613797",
      "to": "1609224964157",
      "queries": [
        
          "refId": "A",
          "intervalMs": 21600000,
          "maxDataPoints": 1470,
          "datasourceId": 4,
          "rawSql": "SELECT\n  \"timestamp\" AS \"time\",\n  cycle_time AS \"cycle_time\"\nFROM issue_metrics\nWHERE\n  $__timeFilter(\"timestamp\") AND\n  project = 'LUSFPRO3' AND\n  epic = 'LUSFPRO3-68','LUSFPRO3-2','LUSFPRO3-69'\nORDER BY 1",
          "format": "time_series"
        
      ]
    ,
    "hideFromInspector": false
  ,
  "response": 
    "results": 
      "A": 
        "error": "pq: syntax error at or near \",\"",
        "refId": "A",
        "meta": 
          "executedQueryString": "SELECT\n  \"timestamp\" AS \"time\",\n  cycle_time AS \"cycle_time\"\nFROM issue_metrics\nWHERE\n  \"timestamp\" BETWEEN '2020-01-02T09:50:13.797Z' AND '2020-12-29T06:56:04.157Z' AND\n  project = 'LUSFPRO3' AND\n  epic = 'LUSFPRO3-68','LUSFPRO3-2','LUSFPRO3-69'\nORDER BY 1"
        ,
        "series": null,
        "tables": null,
        "dataframes": null
      
    ,
    "message": "pq: syntax error at or near \",\""
  

【问题讨论】:

请出示Generated SQL @JanGaraj 刚刚发布了有关生成 SQL 的更新。 【参考方案1】:

那个多值变量生成错误的 SQL 语法:

epic = 'LUSFPRO3-68','LUSFPRO3-2','LUSFPRO3-69'

GUI 编辑器仅适用于简单查询。切换到文本编辑模式并将查询中的epic 条件更新为:

epic IN ($Epic)

以便生成正确的 SQL 语法:

epic IN ('LUSFPRO3-68','LUSFPRO3-2','LUSFPRO3-69')

【讨论】:

这行得通,谢谢!无论如何让查询生成器使用“IN”语法而不是“=”,或者如果我想添加到这个,我是否从现在开始强制使用自定义 SQL 命令? 在 GUI 编辑器中单击 =,它应该提供所有可用选项。其实IN也有。

以上是关于Grafana Postgres 使用可具有多个值的 Where 查询时出错的主要内容,如果未能解决你的问题,请参考以下文章

Grafana 引用数据集变量以使用 Postgres 驱动程序转换图例值

使用 Activerecord、Rails 和 Postgres 查找具有多个重复字段的行

Grafana 使用 Postgres 及时转移

使用 PostgresQL 作为数据源在 Grafana 中进行一个查询的多个系列

Grafana 与 springboot 和 postgres 的集成

Grafana之Gauge和Bar Gauge使用(第十一篇)