首页 > 解决方案 > 读取一个变量 JSONB 并将其放入 postgresql 的列中

问题描述

我正在阅读一个具有 jsonb 列的 postgresql 数据库,jsonb 的长度是可变的。我想阅读 jsonb 列并从中制作一个表格:

type | jsonb
---------------------------
 a   |[0,-0.9996,300,...] length -> 18
 b   |[1,89,10,...] length -> 16
 a   |[2,-0.79,200,...] length -> 18
...

我需要一个函数,它根据输入为您提供下表,Input = "type a":

Status | energ   | time ... until the 18th value
-----------------------
0      | -0.9996 | 3000

输入=“类型b”:

SerialNumber | reference | status ... until the 16th value
---------------------------------
1            | 89        | 10

我正在尝试这样的事情:

CREATE OR REPLACE FUNCTION pg_temp.test()
  RETURNS entry
 AS $$
 DECLARE
    dato jsonb;
    len integer;
BEGIN
  FOR tsi,dato IN
    SELECT ts,sgdata 
    FROM ingecms.samplegroup 
    WHERE samplegroup.cyclicgroupid = 7
    ORDER BY 1
    LOOP
    len=jsonb_array_length(dato);
    FOR x in 0..len-1 LOOP
        entry = ---Reading the jsonb object from position 0 until len
    END LOOP;
    RETURN entry
   END LOOP;
END; $$ LANGUAGE plpgsql;

SELECT * from pg_temp.test();

标签: sqlpostgresqljsonbpostgresql-9.4sql-function

解决方案


对于有效的 json,您可以使用函数jsonb_array_elements_text

SELECT 
    *
FROM jsonb_array_elements_text('[0,-0.9996,300]'::jsonb);

推荐阅读