我有带有numeric/decimal列的表,我正在将行转换为json
select to_jsonb(t.*) from my_table t在转换为json之前,我需要将numeric列转换为文本。
我之所以需要这样做,是因为JavaScript不能很好地处理大的数字,所以我可能会失去精度。我使用decimal.js,字符串表示是构造decimal.js数字的最佳方法。
我知道我能做到
select to_jsonb(t.*) || jsonb_build_object('numeric_column', numeric_column::text) from my_table t但我想让它自动完成。在传递到numeric函数之前,是否有一种方法可以将所有to_jsonb列转换为文本?
它可以是用户定义的postgres函数。
编辑:只是为了澄清我的问题。我需要的是一些类似于to_jsonb的函数,除了numeric/decimal类型的所有列都存储在结果JSON中的string之外。
谢谢
发布于 2022-01-18 16:40:12
发布于 2022-01-18 21:14:31
此解决方案将所有json值转换为文本:
SELECT jsonb_object_agg(d.key, d.value)
FROM my_table AS t
CROSS JOIN LATERAL jsonb_each_text(to_jsonb(t.*)) AS d
GROUP BY t然而,此解决方案只将json数字转换为文本:
SELECT jsonb_object_agg(d.key, CASE WHEN jsonb_typeof(d.value) = 'number' THEN to_jsonb(d.value :: text) ELSE d.value END)
FROM my_table AS t
CROSS JOIN LATERAL jsonb_each(to_jsonb(t.*)) AS d
GROUP BY t[医]小提琴测试结果。
https://stackoverflow.com/questions/70753241
复制相似问题