to_json
está marcado como STRICT
función, es malo - devolver NULL cuando cualquier parámetro es NULL. No estoy seguro de si es una implementación correcta, tal vez sea un error de PostgreSQL.
Actualización:después de la discusión sobre la lista de correo de Postgres, este no es el error, sino la característica:la situación no es simple debido a que ambos idiomas admiten NULL, pero el comportamiento de NULL es un poco diferente en cualquiera de estos idiomas. Es difícil decidir si SQL NULL debe transformarse inmediatamente en JSON NULL y perder un comportamiento SQL inmediato. Si necesita un comportamiento diferente, puede usar una función SQL:
CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;