Thread: ERROR: operator does not exist: integer = integer[]

ERROR: operator does not exist: integer = integer[]

From
A Gilmore
Date:
Hello,

Im having problems trying to concatenate two arrays in a plpgsql
function.  Doing the following :

--
CREATE TABLE t1 (
    id1        int,
    id2        int
);

INSERT INTO t1 (id1, id2) VALUES (1,3);
INSERT INTO t1 (id1, id2) VALUES (1,4);
INSERT INTO t1 (id1, id2) VALUES (1,5);
INSERT INTO t1 (id1, id2) VALUES (1,6);
INSERT INTO t1 (id1, id2) VALUES (2,7);
INSERT INTO t1 (id1, id2) VALUES (2,8);

CREATE OR REPLACE FUNCTION tmpfunc(int[]) RETURNS int[] AS '
DECLARE
    Ids ALIAS FOR $1;
    AllIds int[];
BEGIN
    AllIds := Ids || array(select id2 from t1 where id1 in (Ids) group by id2);
    RETURN AllIds;
END
' LANGUAGE 'plpgsql';

SELECT * FROM tmpfunc(array[1,2]);
ERROR:  operator does not exist: integer = integer[]

--

What am I doing wrong here?

Thank you in advance,
- A Gilmore

Re: ERROR: operator does not exist: integer = integer[]

From
A Gilmore
Date:
A Gilmore wrote:
> CREATE OR REPLACE FUNCTION tmpfunc(int[]) RETURNS int[] AS '
> DECLARE
>     Ids ALIAS FOR $1;
>     AllIds int[];
> BEGIN
>     AllIds := Ids || array(select id2 from t1 where id1 in (Ids) group
> by id2);
>     RETURN AllIds;
> END
> ' LANGUAGE 'plpgsql';
>
> SELECT * FROM tmpfunc(array[1,2]);
> ERROR:  operator does not exist: integer = integer[]
>

Got it, the array() was done wrong.  Works as :

AllIds := Ids || array(select id2 from t1 where id1 = ANY (Ids) group by
id2);

- A Gilmore