提问者:小点点

Postgres jsonb按动态路径获取


有没有可能在postgres中做这样的事情:

do $$
declare
  v_key text;
  v_json jsonb;
begin
  v_key := 'id';
  v_json := jsonb_build_object(
    'id', jsonb_build_object('nest_id',1)
  );
  raise notice '%', v_json #> '{'||v_key||'}'->>'nest_id';
end$$

错误:运算符不存在:jsonb#>TEXT
没有与给定名称和参数类型匹配的运算符。您可能需要添加显式类型转换。


共1个答案

匿名用户

运算符#>的右操作数类型是文本数组。使用数组[...]表示法:

raise notice '%', v_json #> array[v_key]->>'nest_id';

或格式化数组文字:

raise notice '%', v_json #> ('{'||v_key||'}')::text[]->>'nest_id';