to_json
được đánh dấu là STRICT
, nó có nghĩa là - trả về NULL khi bất kỳ tham số nào là NULL. Tôi không chắc liệu nó có được triển khai chính xác hay không, có thể đó là lỗi PostgreSQL.
Cập nhật:Sau khi thảo luận về danh sách gửi thư của Postgres, đây không phải là lỗi, mà là tính năng - tình hình không đơn giản do thực tế, vì vậy cả hai ngôn ngữ đều hỗ trợ NULL, nhưng hoạt động của NULL có chút khác biệt so với bất kỳ ngôn ngữ nào. Thật khó để quyết định liệu SQL NULL có phải được chuyển đổi ngay lập tức thành JSON NULL hay không và mất hành vi SQL ngay lập tức. Nếu bạn cần hành vi khác, bạn có thể sử dụng một hàm SQL:
CREATE OR REPLACE FUNCTION to_json2(anyelement)
RETURNS json AS $$
SELECT COALESCE(to_json($1), json 'null')
$$ LANGUAGE sql;