我有这个 pl/pgsql 函数来聚合两个表中的行jsonb
value (data_table_1
and data_table_2
). fk_id
是两个表中的公共外键 id:
DECLARE
v_my_variable_1 jsonb;
v_my_variable_2 jsonb;
v_combined jsonb;
BEGIN
SELECT json_agg( data_table_1 ) INTO v_my_variable FROM data_table_1 WHERE fk_id = v_id;
SELECT json_agg( data_table_2 ) into v_my_variable_2 FROM data_table_2 WHERE fk_id = v_id;
SELECT v_my_variable || v_my_variable_2 into v_combined;
现在我想排序v_combined
由田地ts
,两个表共有的时间戳列,因此是所有数组对象中的公共键jsonb
value.
Example:
v_combined = '[{"id": 1, "type": 4, "param": 3, "ts": 12354355}
, {"id": 1, "txt": "something", "args": 5, "ts": 12354345}]';
如何对数组元素进行排序v_combined
按升序排列ts
?
如果我从表中选择,我可以简单地使用:
select * into v_combined from v_combined ORDER BY v_combined->>'ts' ASC;
但当我尝试这样做时,它说v_combined
不存在。有没有办法将其存储在临时表中并在那里排序,或者有没有直接的方法对 pl/pgsql 中的 json 对象数组进行排序?