Проблема в том, что запрос не возвращает результатов, а не в том, что NULL
. Одним из методов является агрегирование результатов - поскольку вы можете агрегировать json - и принимать первое значение:
SELECT COALESCE( (array_agg(row_to_json(t)))[1], '{}'::json)
INTO result
FROM (SELECT id, foo, bar FROM myschema.mytable WHERE id = log_id) t;
RETURN result;
В качестве альтернативы вы можете использовать условные логики c:
if not exists () then use '{}'::json
else use your query