From 7c1bb18fb9c06c4b16604db21fdfd42258e9513c Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 11 Feb 2022 15:53:10 +0100 Subject: [PATCH 1/3] fix(ui) - inspector --- frontend/app/components/Session_/Player/Controls/Controls.js | 2 +- frontend/app/components/Session_/Player/Overlay.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/app/components/Session_/Player/Controls/Controls.js b/frontend/app/components/Session_/Player/Controls/Controls.js index e3e3bcc7a..fdada40e7 100644 --- a/frontend/app/components/Session_/Player/Controls/Controls.js +++ b/frontend/app/components/Session_/Player/Controls/Controls.js @@ -430,7 +430,7 @@ export default class Controls extends React.Component { toggleBottomBlock(INSPECTOR) } + onClick={ toggleInspectorMode } icon={ inspectorMode ? 'close' : 'inspect' } label="Inspect" /> diff --git a/frontend/app/components/Session_/Player/Overlay.tsx b/frontend/app/components/Session_/Player/Overlay.tsx index ca4384ccb..bed0e3a00 100644 --- a/frontend/app/components/Session_/Player/Overlay.tsx +++ b/frontend/app/components/Session_/Player/Overlay.tsx @@ -75,6 +75,7 @@ export default connectPlayer(state => ({ loading: state.messagesLoading || state.cssLoading, completed: state.completed, autoplay: state.autoplay, + inspectorMode: state.inspectorMode, live: state.live, liveStatusText: getStatusText(state.peerConnectionStatus), concetionStatus: state.peerConnectionStatus, From 31675da18b906a9c8ee7c6cbf27b5a907e808f6b Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Fri, 11 Feb 2022 16:20:39 +0100 Subject: [PATCH 2/3] fix(ui) - funnel create button --- .../ui/SavedSearchList/SavedSearchList.js | 16 +++++++++------- frontend/app/duck/search.js | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/frontend/app/components/ui/SavedSearchList/SavedSearchList.js b/frontend/app/components/ui/SavedSearchList/SavedSearchList.js index fc82f1ef0..d615238bd 100644 --- a/frontend/app/components/ui/SavedSearchList/SavedSearchList.js +++ b/frontend/app/components/ui/SavedSearchList/SavedSearchList.js @@ -5,7 +5,7 @@ import cn from 'classnames'; import { Icon, IconButton, Loader, Button } from 'UI'; import { confirm } from 'UI/Confirmation'; import { withRouter } from 'react-router-dom'; -import { addEvent } from 'Duck/filters'; +import { addFilterByKeyAndValue } from 'Duck/search'; import { fetchList as fetchFunnelsList, applySavedFilter, @@ -20,6 +20,7 @@ import Event, { TYPES } from 'Types/filter/event'; import FunnelMenuItem from 'Components/Funnels/FunnelMenuItem'; import FunnelSaveModal from 'Components/Funnels/FunnelSaveModal'; import { blink as setBlink } from 'Duck/funnels'; +import { FilterKey } from 'Types/filter/filterType'; const DEFAULT_VISIBLE = 3; @withRouter @@ -56,11 +57,11 @@ class SavedSearchList extends React.Component { } createHandler = () => { - const { events } = this.props; - if (events.size === 0) { - this.props.addEvent(Event({ type: TYPES.LOCATION, key: TYPES.LOCATION } )) - this.props.addEvent(Event({ type: TYPES.LOCATION, key: TYPES.LOCATION } )) - this.props.addEvent(Event({ type: TYPES.CLICK, key: TYPES.CLICK } )) + const { filters } = this.props; + if (filters.size === 0) { + this.props.addFilterByKeyAndValue(FilterKey.LOCATION, ''); + this.props.addFilterByKeyAndValue(FilterKey.LOCATION, ''); + this.props.addFilterByKeyAndValue(FilterKey.CLICK, '') } else { this.props.setBlink() } @@ -146,11 +147,12 @@ export default connect(state => ({ activeTab: state.getIn([ 'sessions', 'activeTab' ]), siteId: state.getIn([ 'user', 'siteId' ]), events: state.getIn([ 'filters', 'appliedFilter', 'events' ]), + filters: state.getIn([ 'search', 'instance', 'filters' ]), }), { applySavedFilter, deleteSearch, setActiveTab, setActiveFlow, clearEvents, - addEvent, + addFilterByKeyAndValue, init, fetchFunnelsList, setBlink diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index 6cec66a27..4bce0e618 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -7,7 +7,7 @@ import SavedFilter from 'Types/filter/savedFilter'; import { errors as errorsRoute, isRoute } from "App/routes"; import { fetchList as fetchSessionList } from './sessions'; import { fetchList as fetchErrorsList } from './errors'; -import { FilterCategory, FilterKey } from '../types/filter/filterType'; +import { FilterCategory, FilterKey } from 'Types/filter/filterType'; import { filtersMap, liveFiltersMap, generateFilterOptions, generateLiveFilterOptions } from 'Types/filter/newFilter'; const ERRORS_ROUTE = errorsRoute(); From 0c60051c01759e987633ca63b038e256bd67bf74 Mon Sep 17 00:00:00 2001 From: Taha Yassine Kraiem Date: Fri, 11 Feb 2022 16:48:03 +0100 Subject: [PATCH 3/3] feat(postgresql): EE create indexes concurrently for large data --- .../db/init_dbs/postgresql/1.5.0/1.5.0.sql | 134 +++++++++--------- 1 file changed, 65 insertions(+), 69 deletions(-) diff --git a/ee/scripts/helm/db/init_dbs/postgresql/1.5.0/1.5.0.sql b/ee/scripts/helm/db/init_dbs/postgresql/1.5.0/1.5.0.sql index 217ae5d6a..03af6067f 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/1.5.0/1.5.0.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/1.5.0/1.5.0.sql @@ -20,52 +20,6 @@ CREATE TABLE IF NOT EXISTS traces parameters jsonb NULL, status int NULL ); -CREATE INDEX IF NOT EXISTS traces_user_id_idx ON traces (user_id); -CREATE INDEX IF NOT EXISTS traces_tenant_id_idx ON traces (tenant_id); - -CREATE INDEX IF NOT EXISTS user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions (user_id, session_id); - -CREATE INDEX IF NOT EXISTS pages_first_contentful_paint_time_idx ON events.pages (first_contentful_paint_time) WHERE first_contentful_paint_time > 0; -CREATE INDEX IF NOT EXISTS pages_dom_content_loaded_time_idx ON events.pages (dom_content_loaded_time) WHERE dom_content_loaded_time > 0; -CREATE INDEX IF NOT EXISTS pages_first_paint_time_idx ON events.pages (first_paint_time) WHERE first_paint_time > 0; -CREATE INDEX IF NOT EXISTS pages_ttfb_idx ON events.pages (ttfb) WHERE ttfb > 0; -CREATE INDEX IF NOT EXISTS pages_time_to_interactive_idx ON events.pages (time_to_interactive) WHERE time_to_interactive > 0; -CREATE INDEX IF NOT EXISTS pages_session_id_timestamp_loadgt0NN_idx ON events.pages (session_id, timestamp) WHERE load_time > 0 AND load_time IS NOT NULL; -CREATE INDEX IF NOT EXISTS pages_session_id_timestamp_visualgt0nn_idx ON events.pages (session_id, timestamp) WHERE visually_complete > 0 AND visually_complete IS NOT NULL; -CREATE INDEX IF NOT EXISTS pages_timestamp_metgt0_idx ON events.pages (timestamp) WHERE response_time > 0 OR - first_paint_time > 0 OR - dom_content_loaded_time > 0 OR - ttfb > 0 OR - time_to_interactive > 0; -CREATE INDEX IF NOT EXISTS pages_session_id_speed_indexgt0nn_idx ON events.pages (session_id, speed_index) WHERE speed_index > 0 AND speed_index IS NOT NULL; -CREATE INDEX IF NOT EXISTS pages_session_id_timestamp_dom_building_timegt0nn_idx ON events.pages (session_id, timestamp, dom_building_time) WHERE dom_building_time > 0 AND dom_building_time IS NOT NULL; -CREATE INDEX IF NOT EXISTS issues_project_id_idx ON issues (project_id); - -CREATE INDEX IF NOT EXISTS errors_project_id_error_id_js_exception_idx ON public.errors (project_id, error_id) WHERE source = 'js_exception'; -CREATE INDEX IF NOT EXISTS errors_project_id_error_id_idx ON public.errors (project_id, error_id); -CREATE INDEX IF NOT EXISTS errors_project_id_error_id_integration_idx ON public.errors (project_id, error_id) WHERE source != 'js_exception'; - -CREATE INDEX IF NOT EXISTS sessions_start_ts_idx ON public.sessions (start_ts) WHERE duration > 0; -CREATE INDEX IF NOT EXISTS sessions_project_id_idx ON public.sessions (project_id) WHERE duration > 0; -CREATE INDEX IF NOT EXISTS sessions_session_id_project_id_start_ts_idx ON sessions (session_id, project_id, start_ts) WHERE duration > 0; - -CREATE INDEX IF NOT EXISTS user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions (user_id, session_id); -CREATE INDEX IF NOT EXISTS jobs_project_id_idx ON jobs (project_id); -CREATE INDEX IF NOT EXISTS errors_session_id_timestamp_error_id_idx ON events.errors (session_id, timestamp, error_id); -CREATE INDEX IF NOT EXISTS errors_error_id_timestamp_idx ON events.errors (error_id, timestamp); -CREATE INDEX IF NOT EXISTS errors_timestamp_error_id_session_id_idx ON events.errors (timestamp, error_id, session_id); -CREATE INDEX IF NOT EXISTS errors_error_id_timestamp_session_id_idx ON events.errors (error_id, timestamp, session_id); -CREATE INDEX IF NOT EXISTS resources_timestamp_idx ON events.resources (timestamp); -CREATE INDEX IF NOT EXISTS resources_success_idx ON events.resources (success); -CREATE INDEX IF NOT EXISTS projects_project_key_idx ON public.projects (project_key); -CREATE INDEX IF NOT EXISTS resources_timestamp_type_durationgt0NN_idx ON events.resources (timestamp, type) WHERE duration > 0 AND duration IS NOT NULL; -CREATE INDEX IF NOT EXISTS resources_session_id_timestamp_idx ON events.resources (session_id, timestamp); -CREATE INDEX IF NOT EXISTS resources_session_id_timestamp_type_idx ON events.resources (session_id, timestamp, type); -CREATE INDEX IF NOT EXISTS resources_timestamp_type_durationgt0NN_noFetch_idx ON events.resources (timestamp, type) WHERE duration > 0 AND duration IS NOT NULL AND type != 'fetch'; -CREATE INDEX IF NOT EXISTS resources_session_id_timestamp_url_host_fail_idx ON events.resources (session_id, timestamp, url_host) WHERE success = FALSE; -CREATE INDEX IF NOT EXISTS resources_session_id_timestamp_url_host_firstparty_idx ON events.resources (session_id, timestamp, url_host) WHERE type IN ('fetch', 'script'); -CREATE INDEX IF NOT EXISTS resources_session_id_timestamp_duration_durationgt0NN_img_idx ON events.resources (session_id, timestamp, duration) WHERE duration > 0 AND duration IS NOT NULL AND type = 'img'; -CREATE INDEX IF NOT EXISTS resources_timestamp_session_id_idx ON events.resources (timestamp, session_id); DROP TRIGGER IF EXISTS on_insert_or_update ON projects; CREATE TRIGGER on_insert_or_update @@ -85,23 +39,12 @@ ALTER TABLE sessions ADD COLUMN IF NOT EXISTS utm_medium text NULL DEFAULT NULL, ADD COLUMN IF NOT EXISTS utm_campaign text NULL DEFAULT NULL; -CREATE INDEX IF NOT EXISTS sessions_utm_source_gin_idx ON public.sessions USING GIN (utm_source gin_trgm_ops); -CREATE INDEX IF NOT EXISTS sessions_utm_medium_gin_idx ON public.sessions USING GIN (utm_medium gin_trgm_ops); -CREATE INDEX IF NOT EXISTS sessions_utm_campaign_gin_idx ON public.sessions USING GIN (utm_campaign gin_trgm_ops); -CREATE INDEX IF NOT EXISTS requests_timestamp_session_id_failed_idx ON events_common.requests (timestamp, session_id) WHERE success = FALSE; DROP INDEX IF EXISTS sessions_project_id_user_browser_idx1; DROP INDEX IF EXISTS sessions_project_id_user_country_idx1; ALTER INDEX IF EXISTS platform_idx RENAME TO sessions_platform_idx; ALTER INDEX IF EXISTS events.resources_duration_idx RENAME TO resources_duration_durationgt0_idx; DROP INDEX IF EXISTS projects_project_key_idx1; -CREATE INDEX IF NOT EXISTS errors_parent_error_id_idx ON errors (parent_error_id); - -CREATE INDEX IF NOT EXISTS performance_session_id_idx ON events.performance (session_id); -CREATE INDEX IF NOT EXISTS performance_timestamp_idx ON events.performance (timestamp); -CREATE INDEX IF NOT EXISTS performance_session_id_timestamp_idx ON events.performance (session_id, timestamp); -CREATE INDEX IF NOT EXISTS performance_avg_cpu_gt0_idx ON events.performance (avg_cpu) WHERE avg_cpu > 0; -CREATE INDEX IF NOT EXISTS performance_avg_used_js_heap_size_gt0_idx ON events.performance (avg_used_js_heap_size) WHERE avg_used_js_heap_size > 0; CREATE TABLE IF NOT EXISTS metrics ( @@ -113,7 +56,7 @@ CREATE TABLE IF NOT EXISTS metrics created_at timestamp default timezone('utc'::text, now()) not null, deleted_at timestamp ); -CREATE INDEX IF NOT EXISTS metrics_user_id_is_public_idx ON public.metrics (user_id, is_public); + CREATE TABLE IF NOT EXISTS metric_series ( series_id integer generated BY DEFAULT AS IDENTITY PRIMARY KEY, @@ -124,8 +67,6 @@ CREATE TABLE IF NOT EXISTS metric_series created_at timestamp DEFAULT timezone('utc'::text, now()) NOT NULL, deleted_at timestamp ); -CREATE INDEX IF NOT EXISTS metric_series_metric_id_idx ON public.metric_series (metric_id); -CREATE INDEX IF NOT EXISTS funnels_project_id_idx ON public.funnels (project_id); CREATE TABLE IF NOT EXISTS searches @@ -140,14 +81,9 @@ CREATE TABLE IF NOT EXISTS searches is_public boolean NOT NULL DEFAULT False ); -CREATE INDEX IF NOT EXISTS searches_user_id_is_public_idx ON public.searches (user_id, is_public); -CREATE INDEX IF NOT EXISTS searches_project_id_idx ON public.searches (project_id); -CREATE INDEX IF NOT EXISTS alerts_project_id_idx ON alerts (project_id); - ALTER TABLE alerts ADD COLUMN IF NOT EXISTS series_id integer NULL REFERENCES metric_series (series_id) ON DELETE CASCADE; -CREATE INDEX IF NOT EXISTS alerts_series_id_idx ON alerts (series_id); UPDATE alerts SET options=jsonb_set(options, '{change}', '"change"') WHERE detection_method = 'change' @@ -162,12 +98,72 @@ CREATE TABLE IF NOT EXISTS roles_projects project_id integer NOT NULL REFERENCES projects (project_id) ON DELETE CASCADE, CONSTRAINT roles_projects_pkey PRIMARY KEY (role_id, project_id) ); -CREATE INDEX IF NOT EXISTS roles_projects_role_id_idx ON roles_projects (role_id); -CREATE INDEX IF NOT EXISTS roles_projects_project_id_idx ON roles_projects (project_id); -- ALTER TABLE public.metrics ADD COLUMN IF NOT EXISTS active boolean NOT NULL DEFAULT TRUE; -CREATE INDEX IF NOT EXISTS resources_timestamp_duration_durationgt0NN_idx ON events.resources (timestamp, duration) WHERE duration > 0 AND duration IS NOT NULL; COMMIT; -ALTER TYPE public.error_source ADD VALUE IF NOT EXISTS 'elasticsearch'; -- cannot add new value inside a transaction block \ No newline at end of file +ALTER TYPE public.error_source ADD VALUE IF NOT EXISTS 'elasticsearch'; -- cannot add new value inside a transaction block + +CREATE INDEX CONCURRENTLY IF NOT EXISTS traces_user_id_idx ON traces (user_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS traces_tenant_id_idx ON traces (tenant_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions (user_id, session_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_first_contentful_paint_time_idx ON events.pages (first_contentful_paint_time) WHERE first_contentful_paint_time > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_dom_content_loaded_time_idx ON events.pages (dom_content_loaded_time) WHERE dom_content_loaded_time > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_first_paint_time_idx ON events.pages (first_paint_time) WHERE first_paint_time > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_ttfb_idx ON events.pages (ttfb) WHERE ttfb > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_time_to_interactive_idx ON events.pages (time_to_interactive) WHERE time_to_interactive > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_session_id_timestamp_loadgt0NN_idx ON events.pages (session_id, timestamp) WHERE load_time > 0 AND load_time IS NOT NULL; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_session_id_timestamp_visualgt0nn_idx ON events.pages (session_id, timestamp) WHERE visually_complete > 0 AND visually_complete IS NOT NULL; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_timestamp_metgt0_idx ON events.pages (timestamp) WHERE + response_time > 0 OR + first_paint_time > 0 OR + dom_content_loaded_time > 0 OR + ttfb > 0 OR + time_to_interactive > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_session_id_speed_indexgt0nn_idx ON events.pages (session_id, speed_index) WHERE speed_index > 0 AND speed_index IS NOT NULL; +CREATE INDEX CONCURRENTLY IF NOT EXISTS pages_session_id_timestamp_dom_building_timegt0nn_idx ON events.pages (session_id, timestamp, dom_building_time) WHERE dom_building_time > 0 AND dom_building_time IS NOT NULL; +CREATE INDEX CONCURRENTLY IF NOT EXISTS issues_project_id_idx ON issues (project_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_project_id_error_id_js_exception_idx ON public.errors (project_id, error_id) WHERE source = 'js_exception'; +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_project_id_error_id_idx ON public.errors (project_id, error_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_project_id_error_id_integration_idx ON public.errors (project_id, error_id) WHERE source != 'js_exception'; +CREATE INDEX CONCURRENTLY IF NOT EXISTS sessions_start_ts_idx ON public.sessions (start_ts) WHERE duration > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS sessions_project_id_idx ON public.sessions (project_id) WHERE duration > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS sessions_session_id_project_id_start_ts_idx ON sessions (session_id, project_id, start_ts) WHERE duration > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS user_favorite_sessions_user_id_session_id_idx ON user_favorite_sessions (user_id, session_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS jobs_project_id_idx ON jobs (project_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_session_id_timestamp_error_id_idx ON events.errors (session_id, timestamp, error_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_error_id_timestamp_idx ON events.errors (error_id, timestamp); +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_timestamp_error_id_session_id_idx ON events.errors (timestamp, error_id, session_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_error_id_timestamp_session_id_idx ON events.errors (error_id, timestamp, session_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_timestamp_idx ON events.resources (timestamp); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_success_idx ON events.resources (success); +CREATE INDEX CONCURRENTLY IF NOT EXISTS projects_project_key_idx ON public.projects (project_key); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_timestamp_type_durationgt0NN_idx ON events.resources (timestamp, type) WHERE duration > 0 AND duration IS NOT NULL; +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_session_id_timestamp_idx ON events.resources (session_id, timestamp); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_session_id_timestamp_type_idx ON events.resources (session_id, timestamp, type); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_timestamp_type_durationgt0NN_noFetch_idx ON events.resources (timestamp, type) WHERE duration > 0 AND duration IS NOT NULL AND type != 'fetch'; +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_session_id_timestamp_url_host_fail_idx ON events.resources (session_id, timestamp, url_host) WHERE success = FALSE; +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_session_id_timestamp_url_host_firstparty_idx ON events.resources (session_id, timestamp, url_host) WHERE type IN ('fetch', 'script'); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_session_id_timestamp_duration_durationgt0NN_img_idx ON events.resources (session_id, timestamp, duration) WHERE duration > 0 AND duration IS NOT NULL AND type = 'img'; +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_timestamp_session_id_idx ON events.resources (timestamp, session_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS sessions_utm_source_gin_idx ON public.sessions USING GIN (utm_source gin_trgm_ops); +CREATE INDEX CONCURRENTLY IF NOT EXISTS sessions_utm_medium_gin_idx ON public.sessions USING GIN (utm_medium gin_trgm_ops); +CREATE INDEX CONCURRENTLY IF NOT EXISTS sessions_utm_campaign_gin_idx ON public.sessions USING GIN (utm_campaign gin_trgm_ops); +CREATE INDEX CONCURRENTLY IF NOT EXISTS requests_timestamp_session_id_failed_idx ON events_common.requests (timestamp, session_id) WHERE success = FALSE; +CREATE INDEX CONCURRENTLY IF NOT EXISTS errors_parent_error_id_idx ON errors (parent_error_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS performance_session_id_idx ON events.performance (session_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS performance_timestamp_idx ON events.performance (timestamp); +CREATE INDEX CONCURRENTLY IF NOT EXISTS performance_session_id_timestamp_idx ON events.performance (session_id, timestamp); +CREATE INDEX CONCURRENTLY IF NOT EXISTS performance_avg_cpu_gt0_idx ON events.performance (avg_cpu) WHERE avg_cpu > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS performance_avg_used_js_heap_size_gt0_idx ON events.performance (avg_used_js_heap_size) WHERE avg_used_js_heap_size > 0; +CREATE INDEX CONCURRENTLY IF NOT EXISTS roles_projects_role_id_idx ON roles_projects (role_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS roles_projects_project_id_idx ON roles_projects (project_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS resources_timestamp_duration_durationgt0NN_idx ON events.resources (timestamp, duration) WHERE duration > 0 AND duration IS NOT NULL; +CREATE INDEX CONCURRENTLY IF NOT EXISTS searches_user_id_is_public_idx ON public.searches (user_id, is_public); +CREATE INDEX CONCURRENTLY IF NOT EXISTS searches_project_id_idx ON public.searches (project_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS alerts_project_id_idx ON alerts (project_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS alerts_series_id_idx ON alerts (series_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS metrics_user_id_is_public_idx ON public.metrics (user_id, is_public); +CREATE INDEX CONCURRENTLY IF NOT EXISTS metric_series_metric_id_idx ON public.metric_series (metric_id); +CREATE INDEX CONCURRENTLY IF NOT EXISTS funnels_project_id_idx ON public.funnels (project_id); \ No newline at end of file