CREATE OR REPLACE FUNCTION extract_crashing_functions (processed_json jsonb) RETURNS text AS
$$
-- extract threads[crashing_idx]->frames[*]->function
SELECT string_agg(functions, E'\n')
FROM (
SELECT jsonb_array_elements(
(($1 #> ARRAY['threads', $1->'crash_info'->>'crashing_thread'])->'frames')
)->>'function' AS functions
) AS frames
$$
LANGUAGE sql IMMUTABLE;
-- This extension is the contrib modules
CREATE EXTENSION IF NOT EXISTS pg_trgm;
-- Used for searching function in the crashing thread backtrace
-- Search will be really slow if this index is not present
CREATE INDEX crash_report_datas_idx_extract_crashing_functions ON crash_report_datas USING gist (
extract_crashing_functions(processed) gist_trgm_ops
);