From 09d3dfab6ec2f8ce5bd54d6fa158211f95b13ef0 Mon Sep 17 00:00:00 2001 From: KRAIEM Taha Yassine Date: Thu, 20 May 2021 22:09:37 +0200 Subject: [PATCH] Changes: - fixed DB structure --- .../db/init_dbs/postgresql/init_schema.sql | 213 +++++++++++------- .../db/init_dbs/postgresql/init_schema.sql | 72 +++++- 2 files changed, 205 insertions(+), 80 deletions(-) diff --git a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql index bc1caf3b2..eed909d99 100644 --- a/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/ee/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -47,78 +47,78 @@ CREATE TABLE tenants CREATE TYPE user_role AS ENUM ('owner', 'admin', 'member'); CREATE TABLE users ( - user_id integer generated BY DEFAULT AS IDENTITY PRIMARY KEY, - tenant_id integer NOT NULL REFERENCES tenants (tenant_id) ON DELETE CASCADE, - email text NOT NULL UNIQUE, - role user_role NOT NULL DEFAULT 'member', - name text NOT NULL, - created_at timestamp without time zone NOT NULL default (now() at time zone 'utc'), - deleted_at timestamp without time zone NULL DEFAULT NULL, - appearance jsonb NOT NULL default '{ - "role": "dev", - "dashboard": { - "cpu": false, - "fps": false, - "avgCpu": false, - "avgFps": false, - "errors": true, - "crashes": false, - "overview": true, - "sessions": true, - "topMetrics": true, - "callsErrors": false, - "pageMetrics": true, - "performance": true, - "timeToRender": false, - "userActivity": false, - "avgFirstPaint": false, - "countSessions": false, - "errorsPerType": false, - "slowestImages": true, - "speedLocation": false, - "slowestDomains": false, - "avgPageLoadTime": false, - "avgTillFirstBit": false, - "avgTimeToRender": false, - "avgVisitedPages": false, - "avgImageLoadTime": false, - "busiestTimeOfDay": true, - "errorsPerDomains": false, - "missingResources": false, - "resourcesByParty": false, - "sessionsFeedback": false, - "slowestResources": false, - "avgUsedJsHeapSize": false, - "domainsErrors_4xx": false, - "domainsErrors_5xx": false, - "memoryConsumption": false, - "pagesDomBuildtime": false, - "pagesResponseTime": false, - "avgRequestLoadTime": false, - "avgSessionDuration": false, - "sessionsPerBrowser": false, - "applicationActivity": true, - "sessionsFrustration": false, - "avgPagesDomBuildtime": false, - "avgPagesResponseTime": false, - "avgTimeToInteractive": false, - "resourcesCountByType": false, - "resourcesLoadingTime": false, - "avgDomContentLoadStart": false, - "avgFirstContentfulPixel": false, - "resourceTypeVsResponseEnd": false, - "impactedSessionsByJsErrors": false, - "impactedSessionsBySlowPages": false, - "resourcesVsVisuallyComplete": false, - "pagesResponseTimeDistribution": false - }, - "sessionsLive": false, - "sessionsDevtools": true -}'::jsonb, - api_key text UNIQUE default generate_api_key(20) not null, - jwt_iat timestamp without time zone NULL DEFAULT NULL, - data jsonb NOT NULL DEFAULT '{}'::jsonb, - weekly_report boolean NOT NULL DEFAULT TRUE + user_id integer generated BY DEFAULT AS IDENTITY PRIMARY KEY, + tenant_id integer NOT NULL REFERENCES tenants (tenant_id) ON DELETE CASCADE, + email text NOT NULL UNIQUE, + role user_role NOT NULL DEFAULT 'member', + name text NOT NULL, + created_at timestamp without time zone NOT NULL default (now() at time zone 'utc'), + deleted_at timestamp without time zone NULL DEFAULT NULL, + appearance jsonb NOT NULL default '{ + "role": "dev", + "dashboard": { + "cpu": false, + "fps": false, + "avgCpu": false, + "avgFps": false, + "errors": true, + "crashes": false, + "overview": true, + "sessions": true, + "topMetrics": true, + "callsErrors": false, + "pageMetrics": true, + "performance": true, + "timeToRender": false, + "userActivity": false, + "avgFirstPaint": false, + "countSessions": false, + "errorsPerType": false, + "slowestImages": true, + "speedLocation": false, + "slowestDomains": false, + "avgPageLoadTime": false, + "avgTillFirstBit": false, + "avgTimeToRender": false, + "avgVisitedPages": false, + "avgImageLoadTime": false, + "busiestTimeOfDay": true, + "errorsPerDomains": false, + "missingResources": false, + "resourcesByParty": false, + "sessionsFeedback": false, + "slowestResources": false, + "avgUsedJsHeapSize": false, + "domainsErrors_4xx": false, + "domainsErrors_5xx": false, + "memoryConsumption": false, + "pagesDomBuildtime": false, + "pagesResponseTime": false, + "avgRequestLoadTime": false, + "avgSessionDuration": false, + "sessionsPerBrowser": false, + "applicationActivity": true, + "sessionsFrustration": false, + "avgPagesDomBuildtime": false, + "avgPagesResponseTime": false, + "avgTimeToInteractive": false, + "resourcesCountByType": false, + "resourcesLoadingTime": false, + "avgDomContentLoadStart": false, + "avgFirstContentfulPixel": false, + "resourceTypeVsResponseEnd": false, + "impactedSessionsByJsErrors": false, + "impactedSessionsBySlowPages": false, + "resourcesVsVisuallyComplete": false, + "pagesResponseTimeDistribution": false + }, + "sessionsLive": false, + "sessionsDevtools": true + }'::jsonb, + api_key text UNIQUE default generate_api_key(20) not null, + jwt_iat timestamp without time zone NULL DEFAULT NULL, + data jsonb NOT NULL DEFAULT '{}'::jsonb, + weekly_report boolean NOT NULL DEFAULT TRUE ); @@ -446,7 +446,6 @@ CREATE INDEX user_viewed_errors_error_id_idx ON public.user_viewed_errors (error -- --- sessions.sql --- - CREATE TYPE device_type AS ENUM ('desktop', 'tablet', 'mobile', 'other'); CREATE TYPE country AS ENUM ('UN', 'RW', 'SO', 'YE', 'IQ', 'SA', 'IR', 'CY', 'TZ', 'SY', 'AM', 'KE', 'CD', 'DJ', 'UG', 'CF', 'SC', 'JO', 'LB', 'KW', 'OM', 'QA', 'BH', 'AE', 'IL', 'TR', 'ET', 'ER', 'EG', 'SD', 'GR', 'BI', 'EE', 'LV', 'AZ', 'LT', 'SJ', 'GE', 'MD', 'BY', 'FI', 'AX', 'UA', 'MK', 'HU', 'BG', 'AL', 'PL', 'RO', 'XK', 'ZW', 'ZM', 'KM', 'MW', 'LS', 'BW', 'MU', 'SZ', 'RE', 'ZA', 'YT', 'MZ', 'MG', 'AF', 'PK', 'BD', 'TM', 'TJ', 'LK', 'BT', 'IN', 'MV', 'IO', 'NP', 'MM', 'UZ', 'KZ', 'KG', 'TF', 'HM', 'CC', 'PW', 'VN', 'TH', 'ID', 'LA', 'TW', 'PH', 'MY', 'CN', 'HK', 'BN', 'MO', 'KH', 'KR', 'JP', 'KP', 'SG', 'CK', 'TL', 'RU', 'MN', 'AU', 'CX', 'MH', 'FM', 'PG', 'SB', 'TV', 'NR', 'VU', 'NC', 'NF', 'NZ', 'FJ', 'LY', 'CM', 'SN', 'CG', 'PT', 'LR', 'CI', 'GH', 'GQ', 'NG', 'BF', 'TG', 'GW', 'MR', 'BJ', 'GA', 'SL', 'ST', 'GI', 'GM', 'GN', 'TD', 'NE', 'ML', 'EH', 'TN', 'ES', 'MA', 'MT', 'DZ', 'FO', 'DK', 'IS', 'GB', 'CH', 'SE', 'NL', 'AT', 'BE', 'DE', 'LU', 'IE', 'MC', 'FR', 'AD', 'LI', 'JE', 'IM', 'GG', 'SK', 'CZ', 'NO', 'VA', 'SM', 'IT', 'SI', 'ME', 'HR', 'BA', 'AO', 'NA', 'SH', 'BV', 'BB', 'CV', 'GY', 'GF', 'SR', 'PM', 'GL', 'PY', 'UY', 'BR', 'FK', 'GS', 'JM', 'DO', 'CU', 'MQ', 'BS', 'BM', 'AI', 'TT', 'KN', 'DM', 'AG', 'LC', 'TC', 'AW', 'VG', 'VC', 'MS', 'MF', 'BL', 'GP', 'GD', 'KY', 'BZ', 'SV', 'GT', 'HN', 'NI', 'CR', 'VE', 'EC', 'CO', 'PA', 'HT', 'AR', 'CL', 'BO', 'PE', 'MX', 'PF', 'PN', 'KI', 'TK', 'TO', 'WF', 'WS', 'NU', 'MP', 'GU', 'PR', 'VI', 'UM', 'AS', 'CA', 'US', 'PS', 'RS', 'AQ', 'SX', 'CW', 'BQ', 'SS'); CREATE TYPE platform AS ENUM ('web','ios','android'); @@ -457,7 +456,7 @@ CREATE TABLE sessions project_id integer NOT NULL REFERENCES projects (project_id) ON DELETE CASCADE, tracker_version text NOT NULL, start_ts bigint NOT NULL, - duration integer NOT NULL, + duration integer NULL, rev_id text DEFAULT NULL, platform platform NOT NULL DEFAULT 'web', is_snippet boolean NOT NULL DEFAULT FALSE, @@ -509,6 +508,7 @@ CREATE INDEX ON sessions (project_id, metadata_7); CREATE INDEX ON sessions (project_id, metadata_8); CREATE INDEX ON sessions (project_id, metadata_9); CREATE INDEX ON sessions (project_id, metadata_10); +-- CREATE INDEX ON sessions (rehydration_id); CREATE INDEX ON sessions (project_id, watchdogs_score DESC); CREATE INDEX platform_idx ON public.sessions (platform); @@ -558,6 +558,7 @@ CREATE TABLE user_favorite_sessions PRIMARY KEY (user_id, session_id) ); + -- --- assignments.sql --- create table assigned_sessions @@ -625,7 +626,6 @@ CREATE INDEX requests_url_gin_idx2 ON events_common.requests USING GIN (RIGHT(ur gin_trgm_ops); -- --- events.sql --- - CREATE SCHEMA events; CREATE TABLE events.pages @@ -648,6 +648,7 @@ CREATE TABLE events.pages time_to_interactive integer DEFAULT NULL, response_time bigint DEFAULT NULL, response_end bigint DEFAULT NULL, + ttfb integer DEFAULT NULL, PRIMARY KEY (session_id, message_id) ); CREATE INDEX ON events.pages (session_id); @@ -667,6 +668,11 @@ CREATE INDEX pages_base_referrer_gin_idx2 ON events.pages USING GIN (RIGHT(base_ gin_trgm_ops); CREATE INDEX ON events.pages (response_time); CREATE INDEX ON events.pages (response_end); +CREATE INDEX pages_path_gin_idx ON events.pages USING GIN (path gin_trgm_ops); +CREATE INDEX pages_path_idx ON events.pages (path); +CREATE INDEX pages_visually_complete_idx ON events.pages (visually_complete) WHERE visually_complete > 0; +CREATE INDEX pages_dom_building_time_idx ON events.pages (dom_building_time) WHERE dom_building_time > 0; +CREATE INDEX pages_load_time_idx ON events.pages (load_time) WHERE load_time > 0; CREATE TABLE events.clicks @@ -733,6 +739,61 @@ CREATE INDEX ON events.state_actions (name); CREATE INDEX state_actions_name_gin_idx ON events.state_actions USING GIN (name gin_trgm_ops); CREATE INDEX ON events.state_actions (timestamp); +CREATE TYPE events.resource_type AS ENUM ('other', 'script', 'stylesheet', 'fetch', 'img', 'media'); +CREATE TYPE events.resource_method AS ENUM ('GET' , 'HEAD' , 'POST' , 'PUT' , 'DELETE' , 'CONNECT' , 'OPTIONS' , 'TRACE' , 'PATCH' ); +CREATE TABLE events.resources +( + session_id bigint NOT NULL REFERENCES sessions (session_id) ON DELETE CASCADE, + message_id bigint NOT NULL, + timestamp bigint NOT NULL, + duration bigint NULL, + type events.resource_type NOT NULL, + url text NOT NULL, + url_host text NOT NULL, + url_hostpath text NOT NULL, + success boolean NOT NULL, + status smallint NULL, + method events.resource_method NULL, + ttfb bigint NULL, + header_size bigint NULL, + encoded_body_size integer NULL, + decoded_body_size integer NULL, + PRIMARY KEY (session_id, message_id) +); +CREATE INDEX ON events.resources (session_id); +CREATE INDEX ON events.resources (timestamp); +CREATE INDEX ON events.resources (success); +CREATE INDEX ON events.resources (status); +CREATE INDEX ON events.resources (type); +CREATE INDEX ON events.resources (duration) WHERE duration > 0; +CREATE INDEX ON events.resources (url_host); + +CREATE INDEX resources_url_gin_idx ON events.resources USING GIN (url gin_trgm_ops); +CREATE INDEX resources_url_idx ON events.resources (url); +CREATE INDEX resources_url_hostpath_gin_idx ON events.resources USING GIN (url_hostpath gin_trgm_ops); +CREATE INDEX resources_url_hostpath_idx ON events.resources (url_hostpath); + + + +CREATE TABLE events.performance +( + session_id bigint NOT NULL REFERENCES sessions (session_id) ON DELETE CASCADE, + timestamp bigint NOT NULL, + message_id bigint NOT NULL, + min_fps smallint NOT NULL, + avg_fps smallint NOT NULL, + max_fps smallint NOT NULL, + min_cpu smallint NOT NULL, + avg_cpu smallint NOT NULL, + max_cpu smallint NOT NULL, + min_total_js_heap_size bigint NOT NULL, + avg_total_js_heap_size bigint NOT NULL, + max_total_js_heap_size bigint NOT NULL, + min_used_js_heap_size bigint NOT NULL, + avg_used_js_heap_size bigint NOT NULL, + max_used_js_heap_size bigint NOT NULL, + PRIMARY KEY (session_id, message_id) +); CREATE OR REPLACE FUNCTION events.funnel(steps integer[], m integer) RETURNS boolean AS @@ -774,4 +835,4 @@ CREATE INDEX autocomplete_type_idx ON public.autocomplete (type); CREATE INDEX autocomplete_value_gin_idx ON public.autocomplete USING GIN (value gin_trgm_ops); -COMMIT; \ No newline at end of file +COMMIT; diff --git a/scripts/helm/db/init_dbs/postgresql/init_schema.sql b/scripts/helm/db/init_dbs/postgresql/init_schema.sql index 7682bde24..97f31d869 100644 --- a/scripts/helm/db/init_dbs/postgresql/init_schema.sql +++ b/scripts/helm/db/init_dbs/postgresql/init_schema.sql @@ -427,7 +427,6 @@ CREATE INDEX user_viewed_errors_error_id_idx ON public.user_viewed_errors (error -- --- sessions.sql --- - CREATE TYPE device_type AS ENUM ('desktop', 'tablet', 'mobile', 'other'); CREATE TYPE country AS ENUM ('UN', 'RW', 'SO', 'YE', 'IQ', 'SA', 'IR', 'CY', 'TZ', 'SY', 'AM', 'KE', 'CD', 'DJ', 'UG', 'CF', 'SC', 'JO', 'LB', 'KW', 'OM', 'QA', 'BH', 'AE', 'IL', 'TR', 'ET', 'ER', 'EG', 'SD', 'GR', 'BI', 'EE', 'LV', 'AZ', 'LT', 'SJ', 'GE', 'MD', 'BY', 'FI', 'AX', 'UA', 'MK', 'HU', 'BG', 'AL', 'PL', 'RO', 'XK', 'ZW', 'ZM', 'KM', 'MW', 'LS', 'BW', 'MU', 'SZ', 'RE', 'ZA', 'YT', 'MZ', 'MG', 'AF', 'PK', 'BD', 'TM', 'TJ', 'LK', 'BT', 'IN', 'MV', 'IO', 'NP', 'MM', 'UZ', 'KZ', 'KG', 'TF', 'HM', 'CC', 'PW', 'VN', 'TH', 'ID', 'LA', 'TW', 'PH', 'MY', 'CN', 'HK', 'BN', 'MO', 'KH', 'KR', 'JP', 'KP', 'SG', 'CK', 'TL', 'RU', 'MN', 'AU', 'CX', 'MH', 'FM', 'PG', 'SB', 'TV', 'NR', 'VU', 'NC', 'NF', 'NZ', 'FJ', 'LY', 'CM', 'SN', 'CG', 'PT', 'LR', 'CI', 'GH', 'GQ', 'NG', 'BF', 'TG', 'GW', 'MR', 'BJ', 'GA', 'SL', 'ST', 'GI', 'GM', 'GN', 'TD', 'NE', 'ML', 'EH', 'TN', 'ES', 'MA', 'MT', 'DZ', 'FO', 'DK', 'IS', 'GB', 'CH', 'SE', 'NL', 'AT', 'BE', 'DE', 'LU', 'IE', 'MC', 'FR', 'AD', 'LI', 'JE', 'IM', 'GG', 'SK', 'CZ', 'NO', 'VA', 'SM', 'IT', 'SI', 'ME', 'HR', 'BA', 'AO', 'NA', 'SH', 'BV', 'BB', 'CV', 'GY', 'GF', 'SR', 'PM', 'GL', 'PY', 'UY', 'BR', 'FK', 'GS', 'JM', 'DO', 'CU', 'MQ', 'BS', 'BM', 'AI', 'TT', 'KN', 'DM', 'AG', 'LC', 'TC', 'AW', 'VG', 'VC', 'MS', 'MF', 'BL', 'GP', 'GD', 'KY', 'BZ', 'SV', 'GT', 'HN', 'NI', 'CR', 'VE', 'EC', 'CO', 'PA', 'HT', 'AR', 'CL', 'BO', 'PE', 'MX', 'PF', 'PN', 'KI', 'TK', 'TO', 'WF', 'WS', 'NU', 'MP', 'GU', 'PR', 'VI', 'UM', 'AS', 'CA', 'US', 'PS', 'RS', 'AQ', 'SX', 'CW', 'BQ', 'SS'); CREATE TYPE platform AS ENUM ('web','ios','android'); @@ -438,7 +437,7 @@ CREATE TABLE sessions project_id integer NOT NULL REFERENCES projects (project_id) ON DELETE CASCADE, tracker_version text NOT NULL, start_ts bigint NOT NULL, - duration integer NOT NULL, + duration integer NULL, rev_id text DEFAULT NULL, platform platform NOT NULL DEFAULT 'web', is_snippet boolean NOT NULL DEFAULT FALSE, @@ -471,6 +470,8 @@ CREATE TABLE sessions metadata_8 text DEFAULT NULL, metadata_9 text DEFAULT NULL, metadata_10 text DEFAULT NULL +-- , +-- rehydration_id integer REFERENCES rehydrations(rehydration_id) ON DELETE SET NULL ); CREATE INDEX ON sessions (project_id, start_ts); CREATE INDEX ON sessions (project_id, user_id); @@ -488,6 +489,7 @@ CREATE INDEX ON sessions (project_id, metadata_7); CREATE INDEX ON sessions (project_id, metadata_8); CREATE INDEX ON sessions (project_id, metadata_9); CREATE INDEX ON sessions (project_id, metadata_10); +-- CREATE INDEX ON sessions (rehydration_id); CREATE INDEX ON sessions (project_id, watchdogs_score DESC); CREATE INDEX platform_idx ON public.sessions (platform); @@ -539,6 +541,7 @@ CREATE TABLE user_favorite_sessions PRIMARY KEY (user_id, session_id) ); + -- --- assignments.sql --- create table assigned_sessions @@ -606,7 +609,6 @@ CREATE INDEX requests_url_gin_idx2 ON events_common.requests USING GIN (RIGHT(ur gin_trgm_ops); -- --- events.sql --- - CREATE SCHEMA events; CREATE TABLE events.pages @@ -629,6 +631,7 @@ CREATE TABLE events.pages time_to_interactive integer DEFAULT NULL, response_time bigint DEFAULT NULL, response_end bigint DEFAULT NULL, + ttfb integer DEFAULT NULL, PRIMARY KEY (session_id, message_id) ); CREATE INDEX ON events.pages (session_id); @@ -648,6 +651,11 @@ CREATE INDEX pages_base_referrer_gin_idx2 ON events.pages USING GIN (RIGHT(base_ gin_trgm_ops); CREATE INDEX ON events.pages (response_time); CREATE INDEX ON events.pages (response_end); +CREATE INDEX pages_path_gin_idx ON events.pages USING GIN (path gin_trgm_ops); +CREATE INDEX pages_path_idx ON events.pages (path); +CREATE INDEX pages_visually_complete_idx ON events.pages (visually_complete) WHERE visually_complete > 0; +CREATE INDEX pages_dom_building_time_idx ON events.pages (dom_building_time) WHERE dom_building_time > 0; +CREATE INDEX pages_load_time_idx ON events.pages (load_time) WHERE load_time > 0; CREATE TABLE events.clicks @@ -714,6 +722,61 @@ CREATE INDEX ON events.state_actions (name); CREATE INDEX state_actions_name_gin_idx ON events.state_actions USING GIN (name gin_trgm_ops); CREATE INDEX ON events.state_actions (timestamp); +CREATE TYPE events.resource_type AS ENUM ('other', 'script', 'stylesheet', 'fetch', 'img', 'media'); +CREATE TYPE events.resource_method AS ENUM ('GET' , 'HEAD' , 'POST' , 'PUT' , 'DELETE' , 'CONNECT' , 'OPTIONS' , 'TRACE' , 'PATCH' ); +CREATE TABLE events.resources +( + session_id bigint NOT NULL REFERENCES sessions (session_id) ON DELETE CASCADE, + message_id bigint NOT NULL, + timestamp bigint NOT NULL, + duration bigint NULL, + type events.resource_type NOT NULL, + url text NOT NULL, + url_host text NOT NULL, + url_hostpath text NOT NULL, + success boolean NOT NULL, + status smallint NULL, + method events.resource_method NULL, + ttfb bigint NULL, + header_size bigint NULL, + encoded_body_size integer NULL, + decoded_body_size integer NULL, + PRIMARY KEY (session_id, message_id) +); +CREATE INDEX ON events.resources (session_id); +CREATE INDEX ON events.resources (timestamp); +CREATE INDEX ON events.resources (success); +CREATE INDEX ON events.resources (status); +CREATE INDEX ON events.resources (type); +CREATE INDEX ON events.resources (duration) WHERE duration > 0; +CREATE INDEX ON events.resources (url_host); + +CREATE INDEX resources_url_gin_idx ON events.resources USING GIN (url gin_trgm_ops); +CREATE INDEX resources_url_idx ON events.resources (url); +CREATE INDEX resources_url_hostpath_gin_idx ON events.resources USING GIN (url_hostpath gin_trgm_ops); +CREATE INDEX resources_url_hostpath_idx ON events.resources (url_hostpath); + + + +CREATE TABLE events.performance +( + session_id bigint NOT NULL REFERENCES sessions (session_id) ON DELETE CASCADE, + timestamp bigint NOT NULL, + message_id bigint NOT NULL, + min_fps smallint NOT NULL, + avg_fps smallint NOT NULL, + max_fps smallint NOT NULL, + min_cpu smallint NOT NULL, + avg_cpu smallint NOT NULL, + max_cpu smallint NOT NULL, + min_total_js_heap_size bigint NOT NULL, + avg_total_js_heap_size bigint NOT NULL, + max_total_js_heap_size bigint NOT NULL, + min_used_js_heap_size bigint NOT NULL, + avg_used_js_heap_size bigint NOT NULL, + max_used_js_heap_size bigint NOT NULL, + PRIMARY KEY (session_id, message_id) +); CREATE OR REPLACE FUNCTION events.funnel(steps integer[], m integer) RETURNS boolean AS @@ -739,6 +802,7 @@ BEGIN END; $$ LANGUAGE plpgsql IMMUTABLE; + -- --- autocomplete.sql --- CREATE TABLE autocomplete @@ -753,4 +817,4 @@ CREATE index autocomplete_project_id_idx ON autocomplete (project_id); CREATE INDEX autocomplete_type_idx ON public.autocomplete (type); CREATE INDEX autocomplete_value_gin_idx ON public.autocomplete USING GIN (value gin_trgm_ops); -COMMIT; \ No newline at end of file +COMMIT;