CREATEORREPLACEFUNCTION jsonb_diff_val(val1 JSONB,val2 JSONB)RETURNS JSONB AS $$
DECLARE
RESULT JSONB;
v RECORD;BEGIN
RESULT = val1;FOR v INSELECT*FROM jsonb_each(val2)LOOPIF RESULT @> jsonb_build_object(v.key,v.value)THEN RESULT = RESULT - v.key;
ELSIF RESULT ? v.keyTHENCONTINUE;ELSE
RESULT = RESULT || jsonb_build_object(v.key,'null');ENDIF;ENDLOOP;RETURN RESULT;END;
$$ LANGUAGE plpgsql;SELECT jsonb_diff_val('{"a":"aaa","b":"bbb","c":"ccc"}'::jsonb,'{"a":"aaa","b":"jjj","d":"ddd"}'::jsonb
);