Add new public function public.jsonb_diff_val

This commit is contained in:
xbgmsharp
2023-04-01 19:25:14 +02:00
parent 2cd9b0dd6c
commit 2f6bb6d5d9

View File

@@ -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';