如何在Postgres 9.3中对JSON类型的列执行更新操作?

时间:2018-01-17 05:42:39

标签: json postgresql postgresql-9.3

作为一个例子,我有这个基本的表结构:

CREATE TABLE test (id serial, info json);
INSERT INTO test(info)
   VALUES ('{
             "dept":[
                     {
                      "name":"abc",
                      "desc":"hello",
                      "enabled":false
                     },
                     {
                      "name":"xyz",
                      "desc":"hello",
                      "enabled":false
                     }
                    ]
            }');

我想更新并设置"enabled":true "name""abc"的位置。

1 个答案:

答案 0 :(得分:1)

PostgreSQL 9.3只具有创建JSON的功能,但没有使用或修改它的功能。我之前已经面对过它,我使用了下面的2个技巧

  1. 将其投射到文本中并使用函数regexp_replace。请参阅下面的查询

    SELECT info, 
           regexp_replace(info::text,
                          '("name":"abc"[^}]+)"enabled":false',
                          E'\\1"enabled":true'
                         )::json 
    FROM test;
    

    更多说明:\\1表示搜索字符串中()之间匹配的字符。您可以找到更多信息here

  2. 较新版本的PostgreSQL具有修改JSON的功能。因此,在较新版本中安装一个小型PostgreSQL实例,并使用“foreign table”或“dblink”功能使用主键更新数据。对于更新jsonjsonb的功能,您可以获得更多here

  3. 希望在这种情况下它会帮助你。