我需要一些帮助来更新Postgres 9.6中jsonb列中的嵌套数据。我正在jsonb列中处理一些复杂的嵌套数据。
假设我们有一个名为(Int) -> Unit
的表,其列名称为my_table
。
jsonb_col
在此列中,我的数据如下所示:
CREATE TABLE my_table (
id integer NOT NULL,
jsonb_col jsonb
);
我想添加/更新一个名为“ b”的密钥。在“ b”中,我要创建一个名为“ new_text”的新键,并从{
"a": {
"text1": "Not default text"
}
}
复制该值,但前提是jsonb_col->'a'->>'text1'
不等于“ Default text”。这样数据将如下所示:
jsonb_col->'a'->>'text1'
使用UPDATE SET语句,我想做类似的事情
{
"a": {
"text1": "Not default text"
},
"b": {
"already_existing": "This text may already exist",
"new_text": "Not default text" // copied from a->>text1
}
}
但是我尝试深入研究jsonb列的SET语句显然无效。我还考虑过使用UPDATE my_table
SET jsonb_col->'b'->>'new_text' = to_copy_over_text
FROM
(
SELECT id, jsonb_col->'a'->>'text1' as to_copy_over_text FROM my_table
WHERE jsonb_col->'a'->>'text1' NOT LIKE 'Default text'
) as not_default
WHERE my_table.id = not_default.id
函数,但是我还没有弄清楚该如何实现我所需要的。
任何有关如何进行这项工作的建议将不胜感激。谢谢!!