使用PostgreSQL中子查询的结果更新jsonb列中的嵌套属性

时间:2020-04-09 01:34:04

标签: postgresql jsonb

我需要一些帮助来更新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 函数,但是我还没有弄清楚该如何实现我所需要的。

任何有关如何进行这项工作的建议将不胜感激。谢谢!!

0 个答案:

没有答案