sql - 读取一个变量 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();
解决方案
对于有效的 json,您可以使用函数jsonb_array_elements_text:
SELECT
*
FROM jsonb_array_elements_text('[0,-0.9996,300]'::jsonb);
推荐阅读
- javascript - 基于布尔属性将对象数组减少为字符串数组
- javascript - 使用自定义钩子在 React 中的多个表中获取数据时自定义 ContextProvider 状态出现问题
- php - 我尝试在本地将“srmklive/paypal”:“〜1.0”实施到我的laravel项目中,在测试实施时,我在下面遇到错误
- azure-devops - 更改 Azure DevOps url 是否会影响 Slack 的 Azure DevOps 扩展?
- python - 在 Pipeline 中的特定列上使用 StandardScaler 并连接到原始数据
- javascript - Paper.js - 如何设置绘制矢量或线段的持续时间?
- c# - 如何解决 KeyPress 退格问题
- android - AutocompleteTextView 的自定义 onItemClickListener
- pandas - 在熊猫中计算每个名称和轮次的滞后平均值
- opengl - 从 UE4 坐标更改/转换为 OpenGL 坐标