Postgresql Postgres更新语句函数

Postgresql Postgres更新语句函数,postgresql,Postgresql,我正在尝试编写一个函数来更新postgres。试试这个版本: CREATE OR REPLACE FUNCTION jsonb_upsert(val1 jsonb, val2 jsonb) RETURNS jsonb LANGUAGE plpgsql AS $$DECLARE v_key text; v_value jsonb; BEGIN /* replace NULL with empty "jsonb" */ val1 := coales

我正在尝试编写一个函数来更新postgres。

试试这个版本:

CREATE OR REPLACE FUNCTION jsonb_upsert(val1 jsonb, val2 jsonb) RETURNS jsonb 
   LANGUAGE plpgsql AS
$$DECLARE
   v_key text;
   v_value jsonb;
BEGIN
   /* replace NULL with empty "jsonb" */
   val1 := coalesce(val1, JSONB '{}');

   /* don't replace non-objects */
   IF coalesce(jsonb_typeof(val2), 'null') = 'object' THEN
      FOR v_key, v_value IN SELECT key, value FROM jsonb_each(val2) LOOP
         val1 := jsonb_set(val1, ARRAY[v_key], v_value);
      END LOOP;
   END IF;

   RETURN val1;
END;$$;