Не могу создать простую функцию Postgresql

Я пытаюсь создать пользовательскую функцию в Postgresql:

CREATE FUNCTION get_balance(user_id integer, statuses integer[]) RETURNS INTEGER 
AS $$
select SUM(table1.credit)
from table1

inner join table2
on table2.field1 = table1.id

inner join table3
on table3.field1 = table2.id
where table3.status_id in (statuses); $$

LANGUAGE SQL;

Ошибка:

ERROR:  operator does not exist: integer = integer[]
LINE 11: where table3.status_id in (statuses); $$

Что я делаю не так?


person アレックス    schedule 21.01.2014    source источник


Ответы (1)


Этот:

table3.status_id in (statuses)

можно упростить для примера в:

regress=>  SELECT 1 IN (ARRAY[1,2,3]);
ERROR:  operator does not exist: integer = integer[]
LINE 1: SELECT 1 IN (ARRAY[1,2,3]);
                 ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

... но IN ожидает буквальный список, например:

regress=> SELECT 1 IN (1, 2, 3);

Поскольку вы хотите передать массив, вам нужно использовать = ANY(...), который ожидает ввода массива:

regress=> SELECT 1 = ANY (ARRAY[1,2,3]);
 ?column? 
----------
 t
(1 row)
person Craig Ringer    schedule 21.01.2014