json_strip_nulls函数是在9.5
. 什么可以给出等效的结果9.4
?
我有一json
列本质上只是一个text
列,但由于内容是 JSON,我们将它作为一个json
列用于语义目的。现在有很多键映射为空,这会浪费空间并导致屏幕混乱。
来回转换jsonb
不会删除空值,9.4
也没有提供很多使用 json(b) 的工具。
json_strip_nulls函数是在9.5
. 什么可以给出等效的结果9.4
?
我有一json
列本质上只是一个text
列,但由于内容是 JSON,我们将它作为一个json
列用于语义目的。现在有很多键映射为空,这会浪费空间并导致屏幕混乱。
来回转换jsonb
不会删除空值,9.4
也没有提供很多使用 json(b) 的工具。
我认为这可以使用自定义聚合和现有的 jsonb 功能来完成:
以下聚合将两个 jsonb 值“合并”为一个。本质上与
a || b
(其中 a 和 b 是 jsonb 值)相同,但作为多行的聚合。使用该聚合,可以编写一个递归函数来删除具有空值的键:
内部选择将 jsonb 值转换为一组键/值对并
null
递归删除这些值。然后将结果值聚合回 jsonb 对象。返回:
结果可以转换回
json
我没有安装 Postgres 9.4 进行测试,但我认为我只使用了 9.4 中可用的功能。