Мне нужно изменить формат массива с [1,2]
на {1,2}
.
Я написал для этого функцию:
CREATE OR REPLACE FUNCTION core.format_array(
parray integer[])
RETURNS integer[]
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
arrayValue integer[];
-- select core.format_array(Array [1,2]);
BEGIN
begin
select parray into arrayValue;
end;
RETURN arrayValue;
END
$BODY$;
И я хочу использовать эту функцию в других функциях, подобных этой:
{"test":[1,2]}//passing the array
test = params ->> 'test';
select core.format_array(ARRAY test::int[]) into test;
Я даже не могу сохранить функцию, которая показывает эту ошибку
ERROR: syntax error at or near "test"
LINE 22: select core.format_array(ARRAY test::int[]) into test;
Поскольку я не могу использовать Array
перед переменной, я удалил ее:
select core.format_array(test::int[]) into test;
На этот раз функция успешно сохранена, но для запроса на вывод выводится исключение:
INFO: Error Name:malformed array literal: "[1,2]"
INFO: Error State:22P02
Так что я делаю не так?
EDIT
с помощью @Laurenz Albe я немного изменил свою функцию
CREATE OR REPLACE FUNCTION core.format_array(
parray text)
RETURNS integer[]
LANGUAGE 'plpgsql'
COST 100
VOLATILE
AS $BODY$
DECLARE
arrayValue integer[];
-- select core.format_array('[1,2]');
BEGIN
begin
SELECT array_agg(x)::int[] into arrayValue
FROM jsonb_array_elements_text(parray::jsonb) AS x(x);
--select parray into arrayValue;
end;
RETURN arrayValue;
END
$BODY$;
И я передал значение как {"test":"[1,2]"}
select core.format_array( params ->> 'test') into test;
Сейчас работает