to_json
está marcado como STRICT
função, é média - retornando NULL quando qualquer parâmetro é NULL. Não tenho certeza se é a implementação correta, talvez seja um bug do PostgreSQL. Atualização:Após discussão na lista de discussão do Postgres, este não é o bug, mas o recurso - a situação não é simples devido ao fato, então ambas as linguagens suportam NULL, mas o comportamento de NULL é um pouco diferente em qualquer uma dessas linguagens. É difícil decidir se SQL NULL deve ser imediatamente transformado em JSON NULL e perder um comportamento SQL imediatamente. Se você precisar de um comportamento diferente, poderá usar uma função SQL:
CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;