PostgreSQL 11: coalesce () для row_to_ json () по-прежнему возвращает ноль - PullRequest
0 голосов
/ 23 марта 2020

В PostgreSQL 11 я бы хотел вернуть строку в формате JSON. Но, к сожалению, COALESCE(row_to_json(t), '{}'::json) все еще возвращает null:

CREATE OR REPLACE FUNCTION myschema.get_log(log_id int) RETURNS text AS $$
DECLARE
    result text;
BEGIN
    SELECT COALESCE(row_to_json(t), '{}'::json)
    INTO result
    FROM (SELECT id, foo, bar FROM myschema.mytable WHERE id = log_id) t;
    RETURN result;
END;
$$ LANGUAGE plpgsql;

Как я могу вернуть пустой JSON объект, если нет строки?

1 Ответ

1 голос
/ 23 марта 2020

Проблема в том, что запрос не возвращает результатов, а не в том, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...