Postgresql 插入值的迭代

Postgresql 插入值的迭代,postgresql,loops,plpgsql,common-table-expression,jsonb,Postgresql,Loops,Plpgsql,Common Table Expression,Jsonb,我将尝试以抽象视图的形式呈现当前设置,重点是批插入的逻辑方法 创建表factv id,…其他列。。; 创建表id,…其他列。。; 创建表格dims id序列,尺寸jsonb; 这两个事实表共享相同的维度,但它们有不同的列 有一个向表发送消息的事件流,有一个为每行执行的函数,逻辑类似于: 创建或替换函数insert_事件将触发器返回为$$ 如果event_json->'type'='someEvent',则 使用factv_插入作为 插入factv VALUES id,…其他列。。 fn_crea

我将尝试以抽象视图的形式呈现当前设置,重点是批插入的逻辑方法

创建表factv id,…其他列。。; 创建表id,…其他列。。; 创建表格dims id序列,尺寸jsonb; 这两个事实表共享相同的维度,但它们有不同的列

有一个向表发送消息的事件流,有一个为每行执行的函数,逻辑类似于:

创建或替换函数insert_事件将触发器返回为$$ 如果event_json->'type'='someEvent',则 使用factv_插入作为 插入factv VALUES id,…其他列。。 fn_createDimId, 新的.event_json->。。, ... 返回id 插入事实值id,…其他列。。 从factv_insert中选择id, 新的.event_json->。。 还有什么事吗。。。 如果结束; 归还新的; 终止 $$语言PLPGSQL; 这里调用的函数fn_createDimId只查找dims表,如果找不到这些维度,则插入它们。如果这些已经在那里了,就给我这些维度的id作为这个事实插入的id

我确实遇到了一些新事件,我需要获取一些信息,这些信息打破了insert into..values的规则,但有错误:作为表达式使用的子查询返回了多行

事件结构类似,但不限于

{
    "type": "someEvent",
    "instruction": {
        "contains": {
            "id": "containerid",
            "map": {
                "50561:null:null": {
                    "productid": "50561",
                    "quantity": 3
                },
                "50562:null:null": {
                    "productid": "50562",
                    "quantity": 8

                },
                "50559:null:null": {
                    "productid": "50559",
                    "quantity": 5
                }
            }
        },
        "target": {
            "50561": "Random",
            "50562": "Random",
            "50559": "Mix",
        }
    }

}
这里出现问题的原因是目标周围的信息以及这些ID的相应数量。从上面显示的事件中,我需要聚合并插入事实表:

-------|-----
target | qty
-------|-----
Random | 11
Mixed  | 5 
-------------
如果要查询以获取信息,我将运行以下操作:

将元数据作为 选择 json\u对象\u键事件\u json->‘指令’->‘目标’作为prodid ,事件\u json->‘指令’->‘目标’->json\u对象\u按键事件\u json->‘指令’->‘目标’作为目标 ,事件\u json->“指令”->“包含”->“映射”->json\u对象\u按键事件\u json->“指令”->“包含”->“映射”->“数量”作为数量 从事件表 选择 目标 sumqty::int 从元数据 按目标分组; 我希望找到一个解决方案,使其能够执行相同的逻辑操作,但克服了多个返回行上的错误,理想情况下是对每个返回超过1行的事件进行迭代