给定此功能:
CREATE OR REPLACE FUNCTION extract_key(
i_m JSONB,
i_key TEXT
) RETURNS JSONB AS $$
BEGIN
RETURN i_m -> i_key;
END;
$$ LANGUAGE 'plpgsql';
我想写一个函数extract_key_array
,其中:
SELECT extract_key_array('hello', '[{"hello": {"id": 1}} ,{"hello": {"id": 2}}]')
输出一个json数组: '[{"id": 1},{"id": 2}]'
您的回答基本上是好的。一些改进:
CREATE OR REPLACE FUNCTION extract_key_array(_key text, _arr jsonb)
RETURNS jsonb
LANGUAGE sql STABLE PARALLEL SAFE AS
$func$
SELECT jsonb_agg(elem -> _key) FROM jsonb_array_elements(_arr) elem;
$func$;
与所需的函数调用一起使用:
SELECT extract_key_array('hello', '[{"hello": {"id": 1}} ,{"hello": {"id": 2}}]')
db <>在这里拨弄
一个简单的SQL函数即可完成工作,并且可以内联。
声明函数,STABLE
并PARALLEL SAFE
(因为它是!),这允许对查询计划进行各种优化。
(仅出于某些未知原因,不要将其声明IMMUTABLE
为被包含。)jsonb_agg()
STABLE
您回答切换问题中显示的功能参数的顺序。
关于函数内联:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句