У меня возникли проблемы с функцией postgres, где я удаляю строку и возвращаю json_build_object, где строка не существует.
Вот код:
CREATE OR REPLACE FUNCTION DeleteXJSON(
in_x_id BIGINT)
RETURNS SETOF JSON AS
$BODY$
DECLARE
ref_json_data JSON;
BEGIN
DELETE FROM xtable WHERE x_id = in_x_id
RETURNING json_build_object('x_id', x_id) INTO ref_json_data;
RETURN QUERY (select ref_json_data);
END
$BODY$
LANGUAGE plpgsql
Это прекрасно работает, когда находит строку, которую нужно удалить, но когда не найдено ни одной строки, в итоге возвращается 1 строка вместо ожидаемых 0 строк.
Я упростил поля json_build_object, поскольку на самом деле их насчитывается десяток.Я возвращаюсь туда.Как мне обработать это соответствующим образом, чтобы 0 строк возвращалось, когда его не существует?Если есть способ лучше справиться с этим, дайте мне знать.
Обновление № 1:
Я исправил фиктивный END IF.Однако, если я запускаю это через psql:
select * from deletexjson(1);
, я получаю следующее:
deletecampjson
----------------
(1 row)