Postgres JSON数组数据处理

时间:2016-03-09 13:40:53

标签: json postgresql plpgsql

有一个表“json_test”并插入以下记录:

create table json_test ( v json);

insert into json_test values ('{"facilityId": ["20","30","40","50","51"]}')

SELECT trim(json_array_elements_text(v->'facilityId') ) from json_test 

上面的选项将设施ID列为单独的行。

我需要在Postgres函数中使用相同的行将记录插入另一个表中。我写了以下代码来返回i。选中时v_status的输出为(20,,,,,,,,,,,,)。我需要得到20,但我无法得到它。

for i in SELECT json_array_elements_text(v->'facilityId') from json_test

loop

v_status:=  i;

end loop;

1 个答案:

答案 0 :(得分:1)

您没有在问题中指定整个功能定义。 假设你有DDL:

CREATE TABLE json_test(
  id SERIAL PRIMARY KEY,
  v JSON
);

INSERT INTO json_test(v) VALUES
  ('{"facilityId": ["20","30","40","50","51"]}'::JSON);

您可以查看完整的PL/pgSQL guide作为参考,但您的功能可能会定义如下:

CREATE OR REPLACE FUNCTION get_facility_ids(rid INTEGER)
  RETURNS SETOF INTEGER AS $$
DECLARE
  t TEXT;
BEGIN
  FOR t IN SELECT json_array_elements_text(v->'facilityId')
    FROM json_test WHERE id = rid
  LOOP
    RETURN NEXT t;
  END LOOP;
END;
$$ LANGUAGE plpgsql;

SELECT get_facility_ids(1) AS facultyId;

仅为了您的信息,您可以INSERT语句中的SELECT条记录。检查documentation