mirror of
https://github.com/xbgmsharp/postgsail.git
synced 2025-09-17 11:17:46 +00:00
Add new public function public.jsonb_diff_val
This commit is contained in:
@@ -300,3 +300,27 @@ $$;
|
|||||||
COMMENT ON FUNCTION
|
COMMENT ON FUNCTION
|
||||||
public.jsonb_recursive_merge
|
public.jsonb_recursive_merge
|
||||||
IS 'Merging JSONB values';
|
IS 'Merging JSONB values';
|
||||||
|
|
||||||
|
-- https://stackoverflow.com/questions/36041784/postgresql-compare-two-jsonb-objects
|
||||||
|
CREATE OR REPLACE FUNCTION public.jsonb_diff_val(val1 JSONB,val2 JSONB)
|
||||||
|
RETURNS JSONB AS $jsonb_diff_val$
|
||||||
|
DECLARE
|
||||||
|
result JSONB;
|
||||||
|
v RECORD;
|
||||||
|
BEGIN
|
||||||
|
result = val1;
|
||||||
|
FOR v IN SELECT * FROM jsonb_each(val2) LOOP
|
||||||
|
IF result @> jsonb_build_object(v.key,v.value)
|
||||||
|
THEN result = result - v.key;
|
||||||
|
ELSIF result ? v.key THEN CONTINUE;
|
||||||
|
ELSE
|
||||||
|
result = result || jsonb_build_object(v.key,'null');
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
RETURN result;
|
||||||
|
END;
|
||||||
|
$jsonb_diff_val$ LANGUAGE plpgsql;
|
||||||
|
-- Description
|
||||||
|
COMMENT ON FUNCTION
|
||||||
|
public.jsonb_diff_val
|
||||||
|
IS 'Compare two jsonb objects';
|
||||||
|
Reference in New Issue
Block a user