How do I modify fields inside the new PostgreSQL JSON datatype?

前端 未结 21 2170
孤独总比滥情好
孤独总比滥情好 2020-11-22 15:37

With postgresql 9.3 I can SELECT specific fields of a JSON data type, but how do you modify them using UPDATE? I can\'t find any examples of this in the postgresql documenta

21条回答
  •  春和景丽
    2020-11-22 16:34

    Even though the following will not satisfy this request (the function json_object_agg is not available in PostgreSQL 9.3), the following can be useful for anyone looking for a || operator for PostgreSQL 9.4, as implemented in the upcoming PostgreSQL 9.5:

    CREATE OR REPLACE FUNCTION jsonb_merge(left JSONB, right JSONB)
    RETURNS JSONB
    AS $$
    SELECT
      CASE WHEN jsonb_typeof($1) = 'object' AND jsonb_typeof($2) = 'object' THEN
           (SELECT json_object_agg(COALESCE(o.key, n.key), CASE WHEN n.key IS NOT NULL THEN n.value ELSE o.value END)::jsonb
            FROM jsonb_each($1) o
            FULL JOIN jsonb_each($2) n ON (n.key = o.key))
       ELSE 
         (CASE WHEN jsonb_typeof($1) = 'array' THEN LEFT($1::text, -1) ELSE '['||$1::text END ||', '||
          CASE WHEN jsonb_typeof($2) = 'array' THEN RIGHT($2::text, -1) ELSE $2::text||']' END)::jsonb
       END     
    $$ LANGUAGE sql IMMUTABLE STRICT;
    GRANT EXECUTE ON FUNCTION jsonb_merge(jsonb, jsonb) TO public;
    CREATE OPERATOR || ( LEFTARG = jsonb, RIGHTARG = jsonb, PROCEDURE = jsonb_merge );
    

提交回复
热议问题