为什么我的 postgres 横向子查询失败了?
Why is my postgres lateral subquery failing?
我正在尝试 运行 使用 postgres 对 LATERAL 子查询的支持的以下查询:
with s as
(
select
tagValues ->> 'mode' as metric
, array_agg(id) as ids
from
metric_v3.v_series
where
name = 'node_cpu'
group by 1
)
select
t.starttime
, s.metric
, t.max
from
s, lateral (
select
d.starttime
, max(d.max) as max
from
metric_v3.gaugedata d
where
d.starttime >= '2020-01-17T00:00Z' AND d.starttime < '2020-01-24T00:00Z'
and d.seriesid in s.ids
group by 1
) t
order by 1,2;
它失败了,其中 s 与横向子查询的 where 子句中的引用有关。
SQL Error [42601]: ERROR: syntax error at or near "s"
我尝试了不同的横向查询方法,但总是得到同样的错误。我不知道我错过了什么。
如果我 运行 CTE 表达式和 select s.* 从它,我得到了预期的结果,所以那部分工作正常。
我正在 运行CentOS 上的 Postgres 11.6。
您不能将 IN
与数组一起使用。您需要使用 ANY
运算符:
and d.seriesid = any(s.ids)
我正在尝试 运行 使用 postgres 对 LATERAL 子查询的支持的以下查询:
with s as
(
select
tagValues ->> 'mode' as metric
, array_agg(id) as ids
from
metric_v3.v_series
where
name = 'node_cpu'
group by 1
)
select
t.starttime
, s.metric
, t.max
from
s, lateral (
select
d.starttime
, max(d.max) as max
from
metric_v3.gaugedata d
where
d.starttime >= '2020-01-17T00:00Z' AND d.starttime < '2020-01-24T00:00Z'
and d.seriesid in s.ids
group by 1
) t
order by 1,2;
它失败了,其中 s 与横向子查询的 where 子句中的引用有关。
SQL Error [42601]: ERROR: syntax error at or near "s"
我尝试了不同的横向查询方法,但总是得到同样的错误。我不知道我错过了什么。
如果我 运行 CTE 表达式和 select s.* 从它,我得到了预期的结果,所以那部分工作正常。
我正在 运行CentOS 上的 Postgres 11.6。
您不能将 IN
与数组一起使用。您需要使用 ANY
运算符:
and d.seriesid = any(s.ids)