【发布时间】:2020-12-03 14:57:53
【问题描述】:
我正在阅读具有 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
...
我需要一个函数,根据输入为您提供下表, 输入=“输入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();
【问题讨论】:
-
列名从何而来?顺便说一句:您的数据不是有效的 JSON。您的意思是“[0,-0.9996,300,...]”(您有数组吗?)。是否所有类型的 JSON 值都恰好有 18 个值,或者类型中的长度是否不同。
-
长度与类型不同,列名来自另一个查询。我有一个 JSON 数据,我打算输入“[0,-0.9996,300,...]”
标签: sql postgresql jsonb postgresql-9.4 sql-function