首页 > 解决方案 > Postgres 更新语句函数

问题描述

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

标签: postgresql

解决方案


试试这个版本:

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;$$;

推荐阅读