to_json
STRICT
としてマークされています 関数、それは意味です-いずれかのパラメータがNULLの場合はNULLを返します。正しい実装かどうかはわかりませんが、PostgreSQLのバグである可能性があります。
更新:Postgresのメーリングリストで議論した後、これはバグではありませんが、機能です-状況は事実上単純ではないため、両方の言語がNULLをサポートしていますが、NULLの動作はこれらの言語とは少し異なります。 SQLNULLをすぐにJSONNULLに変換し、SQLの動作をすぐに失う必要があるかどうかを判断するのは困難です。別の動作が必要な場合は、SQL関数を使用できます:
CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;