to_json
è contrassegnato come STRICT
funzione, è medio - restituendo NULL quando qualsiasi parametro è NULL. Non sono sicuro che sia un'implementazione corretta, forse è un bug di PostgreSQL.
Aggiornamento:dopo la discussione sulla mailing list di Postgres, questo non è il bug, ma la caratteristica:la situazione non è un fatto semplice, quindi entrambe le lingue supportano NULL, ma il comportamento di NULL è leggermente diverso in ognuna di queste lingue. È difficile decidere se SQL NULL deve essere immediatamente trasformato in JSON NULL e perso un comportamento SQL immediatamente. Se hai bisogno di un comportamento diverso, puoi usare una funzione SQL:
CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;