许多jsonb / json函数都希望列的所有值都是json数组(如jsonb_array_length
)或只有json对象(如jsonb_build_oject
)。
数据库中有一些jsonb列包含数组和对象根的混合,是否有任何简单的方法来过滤掉数组和对象,以便像
这样的查询SELECT DISTINCT jsonb_object_keys(my_column) FROM my_table;
cannot call jsonb_object_keys on an array
或
SELECT my_column FROM my_table WHERE jsonb_array_length(column) > 0;
cannot get array length of a non-array
答案 0 :(得分:6)
如[{3}}中所述,函数jsonb_typeof
或json_typeof
可用于应用此类过滤
喜欢
SELECT DISTINCT jsonb_object_keys(my_column)
FROM my_table WHERE jsonb_typeof(column) ='object' ;
或
SELECT my_column FROM my_table
WHERE jsonb_array_length(column) > 0
AND jsonb_typeof(column) ='array' ;