PostgreSQL更新

Postgresql update

我是 postgreql 的新手 sql itself.So 如何设置 'class' 的 json 值?官方文档和其他资源为我提供了函数 jsonb_set,我用它来设置“X”的硬编码值,但是我无法根据学生设置动态值 table的专栏。

update dp_user_custom_properties_v2 ducpv
    set json_value = jsonb_set(ducpv.json_value, '{class}',s.class::text)
    from students s
    where s.user_id = ducpv.user_id and s.status is null;

这不起作用但是

set json_value = jsonb_set(ducpv.json_value, '{class}','"A"')

确实如此。

发生这种情况是因为 jsonb_set() 的第 3 个参数应该是 jsonb 而您正在传递文本。您应该先将其转换为 jsonb。 使用 to_jsonb() 如下所示。

update dp_user_custom_properties_v2 ducpv
    set json_value = jsonb_set(ducpv.json_value, '{class}',to_jsonb(s.class::text))
    from students s
    where s.user_id = ducpv.user_id and s.status is null;

我通过在线资源找到了另一种方法 -

update dp_user_custom_properties_v2 ducpv
                        set json_value = ducpv.json_value||jsonb_build_object('section', s.section,'class', s.class)
                        from students s
                        where s.user_id = ducpv.user_id and s.status is null;