4

此 plpgsql 脚本从一组 jsonb 对象键:值对中选择键,但是如何为每对选择值?

DO
$BODY$
DECLARE
    js jsonb := '{"a": "1", "b": "2", "c": "3"}';
    i text;
BEGIN
  FOR i IN SELECT * FROM jsonb_each_text(js)
  LOOP
    RAISE NOTICE 'key %', i;
    --RAISE NOTICE 'value %', i.value; <--fai
  END LOOP;
END;
$BODY$;

应该可以作为手册页http://www.postgresql.org/docs/9.4/static/functions-json.html指示返回值是 setof 键文本,值文本。这篇Postgres - array for loop回答了数组的问题。还尝试了 jsonb_each() 和 jsonb_array_elements() 将迭代器更改为 jsonb,出现错误“无法从对象中提取元素”

4

1 回答 1

11

正如您声明i的那样,text它仅包含第一列。将其声明为RECORD

DO
$BODY$
DECLARE
    js jsonb := '{"a": "1", "b": "2", "c": "3"}';
    i record;
BEGIN
  FOR i IN SELECT * FROM jsonb_each_text(js)
  LOOP
    RAISE NOTICE 'key %', i.key;
    RAISE NOTICE 'value %', i.value;
  END LOOP;
END;
$BODY$;
于 2015-04-27T06:43:38.573 回答