根据键搜索POstgres JSONB列

时间:2019-12-09 09:31:23

标签: ruby-on-rails postgresql rails-activerecord

我有一个表abcs和denom_qty jsonb列。存储的值将采用格式

{"100"=>5, "1000"=>2}

我要过滤denom_qty列具有键> =给定值(例如100)的所有行。

我知道,如果数据以格式存储

{“面额” => 100,“数量” => 2}。然后我找到了多个答案。但是由于现在无法更改数据结构,因此我如何查询denom_qty列的键大于100的所有行?

1 个答案:

答案 0 :(得分:0)

我认为您可以基于json键值创建一个函数,并检查是否有大于100的键。 例如

create function jsonkey( inpt jsonb)
returns jsonb
LANGUAGE 'plpgsql'
COST 100
VOLATILE 
AS $BODY$
DECLARE
keyobj text[];
BEGIN
select array_agg(a.data) from(select jsonb_object_keys('{"100":5, "1000":2, "5":41}'::jsonb) as data )a into keyobj;

For i in select (keyobj)
LOOP
    if(i >=100) THEN
        return '{"100":5, "1000":2, "5":41}'::jsonb->>i;
    ELSE
        return '{}'::josnb;
    END IF;

END LOOP;

END;
$BODY$;

希望获得帮助。