to_json
est marqué comme STRICT
fonction, cela signifie - renvoyer NULL lorsqu'un paramètre est NULL. Je ne sais pas si c'est la bonne implémentation, c'est peut-être un bogue PostgreSQL.
Mise à jour :après discussion sur la liste de diffusion de Postgres, ce n'est pas le bogue, mais la fonctionnalité - la situation n'est pas simple, donc les deux langages prennent en charge NULL, mais le comportement de NULL est un peu différent dans chacun de ces langages. Il est difficile de décider si SQL NULL doit être immédiatement transformé en JSON NULL et perdre un comportement SQL immédiatement. Si vous avez besoin d'un comportement différent, vous pouvez utiliser une fonction SQL :
CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;