从PostgreSQL中的json列解包数据

时间:2016-08-25 00:57:42

标签: json postgresql

我有一个属性表,其中一个包含11个数字元素的json数组。我需要对json数组中的数据进行一些聚合(没什么花哨,只是平均值,最大/最小统计数据等)。

发现的广义答案here看起来非常适合将数据重新格式化为临时视图以便快速查询。我将jsonb_each更改为son_each(也许这会起作用?)并且不返回任何错误,但最后会出现一个标题为'create_jsonb_pivot_view'且没有数据的列。

这是功能:

create or replace function create_jsonb_pivot_view
    (table_name text, regular_columns text, json_column text)
returns void language plpgsql as $$
declare
    s text;
begin
    execute format ($fmt$
        select string_agg(format('%s->>''%s'' "%s"', key, key), ',')
        from (
            select distinct key
            from %s, json_each(%s)
            order by 1
            ) s;
        $fmt$, json_column, '%s', '%s', table_name, json_column)
    into s;
    execute format('
        drop view if exists %s_view;
        create view %s_view as 
        select %s, %s from %s', 
        table_name, table_name, regular_columns, s, table_name);
end $$;

最后使用该函数的查询:

select create_jsonb_pivot_view('table', 'A, B, C, D', 'params')

我之前从未使用SQL中的函数,所以这对我来说是一个新的领域。也许有一种不同的,更好的方式来实现我的目标?

1 个答案:

答案 0 :(得分:0)

没关系实际工作 - 只需要花一点时间来处理这个功能。是要删除我的帖子,但如果这对其他人有用,我会留下它!