多个文本数组的交集:错误:数组值必须以"{"开头



我正试图让这个问题中的函数发挥作用:PostgreSQL 中多个数组的交集

与这个问题不同,我希望与文本数组相交,而不是与整数数组相交。我相应地修改了这两个函数。基本阵列相交功能:

CREATE FUNCTION array_intersect(a1 text[], a2 text[]) RETURNS text[] AS $$
DECLARE
    ret text[];
BEGIN
    IF a1 is null THEN
        return a2;
    ELSEIF a2 is null THEN
        RETURN a1;
    END IF;
    SELECT array_agg(e) INTO ret
    FROM (
        SELECT unnest(a1)
        INTERSECT
        SELECT unnest(a2)
    ) AS dt(e);
    RETURN ret;
END;
$$ language plpgsql;

聚合函数定义:

CREATE AGGREGATE utility.array_intersect_agg(
    sfunc    = array_intersect,
    basetype = text[],
    stype    = text[],
    initcond = NULL
);

我得到错误"error:数组值必须以"{"或维度信息开头SQL状态:22P02"当我尝试运行以下代码时:

SELECT array_intersect_agg(test)
  FROM(
    SELECT ARRAY['A','B','C'] test
    UNION ALL
    SELECT ARRAY['A','C'] test
    ) a

为了使这些功能发挥作用,需要进行哪些更改?

对于文档:

initial_condition

状态值的初始设置。这必须是一个字符串常量,其形式为数据类型state_data_type所接受的形式。如果如果未指定,则状态值以null开头。

因此,聚合声明应该是这样的:

CREATE AGGREGATE array_intersect_agg(
    sfunc    = array_intersect,
    basetype = text[],
    stype    = text[]
);

相关内容

  • 没有找到相关文章

最新更新