CREATE OR REPLACE FUNCTION logidze_compact_history(log_data jsonb, cutoff integer DEFAULT 1) RETURNS jsonb AS $body$
-- version: 1 DECLARE merged jsonb; BEGIN LOOP merged := jsonb_build_object( 'ts', log_data#>'{h,1,ts}', 'v', log_data#>'{h,1,v}', 'c', (log_data#>'{h,0,c}') || (log_data#>'{h,1,c}') ); IF (log_data#>'{h,1}' ? 'm') THEN merged := jsonb_set(merged, ARRAY['m'], log_data#>'{h,1,m}'); END IF; log_data := jsonb_set( log_data, '{h}', jsonb_set( log_data->'h', '{1}', merged ) - 0 ); cutoff := cutoff - 1; EXIT WHEN cutoff <= 0; END LOOP; return log_data; END;
$body$ LANGUAGE plpgsql;