CREATE OR REPLACE FUNCTION logidze_snapshot(item jsonb, ts_column text DEFAULT NULL, columns text[] DEFAULT NULL, include_columns boolean DEFAULT false) RETURNS jsonb AS $body$
-- version: 3 DECLARE ts timestamp with time zone; k text; BEGIN item = item - 'log_data'; IF ts_column IS NULL THEN ts := statement_timestamp(); ELSE ts := coalesce((item->>ts_column)::timestamp with time zone, statement_timestamp()); END IF; IF columns IS NOT NULL THEN item := logidze_filter_keys(item, columns, include_columns); END IF; FOR k IN (SELECT key FROM jsonb_each(item)) LOOP IF jsonb_typeof(item->k) = 'object' THEN item := jsonb_set(item, ARRAY[k], to_jsonb(item->>k)); END IF; END LOOP; return json_build_object( 'v', 1, 'h', jsonb_build_array( logidze_version(1, item, ts) ) ); END;
$body$ LANGUAGE plpgsql;