У меня есть простая функция PostgreSQL, я хочу передать сложный JSON:
CREATE OR REPLACE FUNCTION foo(sync_data json)
RETURNS json AS
$body$
DECLARE
...
END;
$body$ LANGUAGE plpgsql;
Называя это примерно так:
SELECT foo ('{"deviceId": 1, "shops": [{"id": 1}, {"id": 2}]}' :: json);
выдает мне следующую ошибку:
- ОШИБКА: литерал некорректного массива: "{" id ": 1}"
- ДЕТАЛИ: Неожиданный элемент массива.
- КОНТЕКСТ: функция PL / pgSQL foo (json) строка 8 в операторе SQL
- Состояние SQL: 22P02
Мне нужно передать сложный JSON в качестве параметра, содержащего массивы объектов.
Спасибо!
PS: полный текст функции:
CREATE OR REPLACE FUNCTION foo(sync_data json)
RETURNS json AS
$body$
DECLARE
res_json json;
device_id integer;
shops json ARRAY;
BEGIN
SELECT json_extract_path(sync_data, 'deviceId') INTO device_id;
SELECT json_array_elements(json_extract_path(sync_data, 'shops')) INTO shops;
SELECT json_build_object('devId', device_id) INTO res_json;
RETURN res_json;
END;
$body$ LANGUAGE plpgsql;