services/migration_service/migration_files/20230118020300_drop_partial_indexes.sql (80 lines of code) (raw):

-- +goose NO TRANSACTION -- +goose Up -- Drop partial str_ids indexes created with -- 20211202100726_add_str_id_indices.sql and 20210260056859_add_tasks_idx_on_.sql -- and recreate them without the constraining WHERE clause. -- This is being done as the psql query planner is not using these indexes many times. -- To avoid perf downtime we first create the new indexes and then drop the old ones. CREATE INDEX CONCURRENTLY IF NOT EXISTS runs_v3_idx_str_ids_primary_key_v2 ON runs_v3 (flow_id, run_id); DROP INDEX CONCURRENTLY IF EXISTS runs_v3_idx_str_ids_primary_key; CREATE INDEX CONCURRENTLY IF NOT EXISTS steps_v3_idx_str_ids_primary_key_v2 ON steps_v3 (flow_id, run_id, step_name); DROP INDEX CONCURRENTLY IF EXISTS steps_v3_idx_str_ids_primary_key; CREATE INDEX CONCURRENTLY IF NOT EXISTS tasks_v3_idx_flow_id_run_id_step_name_task_name_v2 ON tasks_v3(flow_id, run_id, step_name, task_name); DROP INDEX CONCURRENTLY IF EXISTS tasks_v3_idx_flow_id_run_id_step_name_task_name; CREATE INDEX CONCURRENTLY IF NOT EXISTS metadata_v3_idx_str_ids_a_key ON metadata_v3 ( flow_id, run_id, step_name, task_name, field_name ); CREATE INDEX CONCURRENTLY IF NOT EXISTS metadata_v3_idx_str_ids_a_key_with_task_id ON metadata_v3 ( flow_id, run_id, step_name, task_id, field_name ); DROP INDEX CONCURRENTLY IF EXISTS metadata_v3_idx_str_ids_primary_key; CREATE INDEX CONCURRENTLY IF NOT EXISTS artifact_v3_idx_str_ids_primary_key_v2 ON artifact_v3 ( flow_id, run_id, step_name, task_name, attempt_id, name ); CREATE INDEX CONCURRENTLY IF NOT EXISTS artifact_v3_idx_str_ids_primary_key_with_task_id ON artifact_v3 ( flow_id, run_id, step_name, task_id, attempt_id, name ); DROP INDEX CONCURRENTLY IF EXISTS artifact_v3_idx_str_ids_primary_key; -- +goose Down -- copy of 20211202100726_add_str_id_indices.sql and 20210260056859_add_tasks_idx_on_.sql -- runs idx on flow_id, run_id CREATE INDEX CONCURRENTLY IF NOT EXISTS runs_v3_idx_str_ids_primary_key ON runs_v3 (flow_id, run_id) WHERE run_id IS NOT NULL; -- steps idx on flow_id, run_id CREATE INDEX CONCURRENTLY IF NOT EXISTS steps_v3_idx_str_ids_primary_key ON steps_v3 (flow_id, run_id, step_name) WHERE run_id IS NOT NULL; -- metadata idx on id, flow_id, run_id, step_name and task_name, field_name CREATE INDEX CONCURRENTLY IF NOT EXISTS metadata_v3_idx_str_ids_primary_key ON metadata_v3 ( id, flow_id, run_id, step_name, task_name, field_name ) WHERE run_id IS NOT NULL AND task_name IS NOT NULL; -- artifact idx on flow_id, run_id, step_name and task_name, attempt_id, name CREATE INDEX CONCURRENTLY IF NOT EXISTS artifact_v3_idx_str_ids_primary_key ON artifact_v3 ( flow_id, run_id, step_name, task_name, attempt_id, name ) WHERE run_id IS NOT NULL AND task_name IS NOT NULL; -- tasks on flow_id, run_id, step_name and task_name CREATE INDEX CONCURRENTLY IF NOT EXISTS tasks_v3_idx_flow_id_run_id_step_name_task_name ON tasks_v3 ( flow_id, run_id, step_name, task_name) WHERE run_id IS NOT NULL AND task_name IS NOT NULL; DROP INDEX CONCURRENTLY IF EXISTS runs_v3_idx_str_ids_primary_key_v2; DROP INDEX CONCURRENTLY IF EXISTS steps_v3_idx_str_ids_primary_key_v2; DROP INDEX CONCURRENTLY IF EXISTS tasks_v3_idx_flow_id_run_id_step_name_task_name_v2; DROP INDEX CONCURRENTLY IF EXISTS metadata_v3_idx_str_ids_a_key; DROP INDEX CONCURRENTLY IF EXISTS metadata_v3_idx_str_ids_a_key_with_task_id; DROP INDEX CONCURRENTLY IF EXISTS artifact_v3_idx_str_ids_primary_key_v2; DROP INDEX CONCURRENTLY IF EXISTS artifact_v3_idx_str_ids_primary_key_with_task_id;