Como comentado nesta resposta,
SELECT (j->'i')::int FROM (SELECT '{"i":null}'::jsonb) t(j); -- fail
resulta em "ERRO: não é possível lançar jsonb nulo tipo integer"... Ok, este é o "PostgreSQL" de qualquer forma", mas por que não torná-lo melhor? Melhor do que adicionar CASE
cláusulas, ele está fazendo "natural" da coisa, que está lançando um JSON-valor NULO para um SQL digitado o valor nulo. Então, não é um problema de implementação, mas parece um erro de especificação no PostregSQL: ele é?