【问题标题】:Postgres: array_agg throws 'cannot accumulate empty arrays' for empty array(s)Postgres:array_agg 为空数组抛出“无法累积空数组”
【发布时间】:2017-09-14 07:27:46
【问题描述】:

当行包含空数组 ({}) 时使用 array_agg 时出现问题。

这是我的 SQL 查询:

SELECT service_name, metric_name, array_agg(value_textarray)
FROM service_data
WHERE service_name = 'ActivityDataService'
GROUP BY service_name, metric_name

列定义如下:

service_name - text
metric_name - text
value_textarray - text[]

当我执行查询并且数据库中有空数组 ({}) 时,我收到以下错误:

ERROR:  cannot accumulate empty arrays

我应该如何解决这个问题?

【问题讨论】:

  • 只需在 WHERE 子句中添加“and array empty”?
  • 确实如此。 AND value_textarray <> '{}' 拿了蛋糕。谢谢。
  • 或者:and coalesce(cardinality(value_textarray),0) = 0

标签: sql postgresql


【解决方案1】:

我遇到了同样的问题,我无法过滤空数组,但我找到了这个函数。 该函数避免了“累积空数组”的错误。

CREATE AGGREGATE array_accum (anyarray)
(
    sfunc = array_cat,
    stype = anyarray,
    initcond = '{}'
);  

来源:https://gist.github.com/ryandotsmith/4602274

【讨论】:

  • 这很有效,并且可能可以自定义为允许连接空数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-23
  • 2017-04-02
  • 2022-06-15
  • 2023-01-20
  • 2018-10-27
相关资源
最近更新 更多