postgres9.4 循环通过 jsonb:select 如何 key:val 对
postgres9.4 loop through jsonb: how select vals of key:val pairs
这个 plpgsql 脚本 select 是一组 jsonb 对象 key:value 对中的键,但是如何 select 每对的值?
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 indicates return value is setof key text, value text. This post Postgres - array for loop 回答数组的问题。
还尝试了 jsonb_each() 和 jsonb_array_elements() 将迭代器更改为 jsonb,错误为 "Cannot extract element from an object"
正如您将 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$;
这个 plpgsql 脚本 select 是一组 jsonb 对象 key:value 对中的键,但是如何 select 每对的值?
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 indicates return value is setof key text, value text. This post Postgres - array for loop 回答数组的问题。 还尝试了 jsonb_each() 和 jsonb_array_elements() 将迭代器更改为 jsonb,错误为 "Cannot extract element from an object"
正如您将 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$;