UPDATE列表postgres

时间:2018-12-31 14:37:33

标签: sql postgresql

我正在尝试更新postgres中的列表,但我不知道该怎么做...

我有一个表,该表有3列,例如昵称,颜色和json,这是一个字符串,该表有一个类似

的对象
{"value1":"answer1", "value2":"answer2" }

在带有json的列上,我想添加昵称和颜色值...

赞:

 {"value1":"answer1", "value2":"answer2", "nickname":"name1", "color":"red" }

如何进行此更新?

2 个答案:

答案 0 :(得分:0)

如果您真的想从Postgres进行此操作,则可以尝试使用REGEXP_REPLACE

WITH cte AS (
    SELECT '{"value1":"answer1", "value2":"answer2"}'::json AS col
)

UPDATE cte
SET col = REGEXP_REPLACE(col::text,
                         '\}$',
                         ', "nickname":"name1", "color":"red"}')::json;


{"value1":"answer1", "value2":"answer2", "nickname":"name1", "color":"red"}

这种方法使用直接字符串操作来查找JSON字符串的结尾,然后插入新的键值对。

如果您使用的是Postgres 9.5或更高版本,则可能要使用merge ||运算符来添加新的JSON内容。在最新版本中,Postgres对JSON操作的支持变得更好,但是9.4版的功能不多。

此外,如果您可以从Hibernate / JPA层处理此问题,则可能更有意义。

答案 1 :(得分:0)

如果要使用表的现有列,可以使用json_build_object

UPDATE t 
    SET    json_col = ( replace(json_col :: text, '}', ',') 
            || replace(Json_build_object ('nickname', nickname, 
                 'color', color) :: text,'{', '' ) ) :: json ;

replace()语句有助于调整json字符串。请注意,这里我认为您的字符串是一个简单的json字符串(不带嵌套数组/ json)。

Demo