Я пытаюсь заставить работать функции в этом вопросе: Пересечение нескольких массивов в 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
);
Я получаю сообщение об ошибке «ОШИБКА: значение массива должно начинаться с «{» или состояния SQL с информацией о измерении: 22P02», когда я пытаюсь запустить следующий код:
SELECT array_intersect_agg(test)
FROM(
SELECT ARRAY['A','B','C'] test
UNION ALL
SELECT ARRAY['A','C'] test
) a
Что нужно изменить, чтобы эти функции заработали?