From ce2ba977a522d79d3fba2a67ddb5a0e5c18214ef Mon Sep 17 00:00:00 2001 From: Tomas Valenta <49156497+ValentaTomas@users.noreply.github.com> Date: Sun, 26 Jul 2026 23:09:11 -0700 Subject: [PATCH] db: drop the superseded env_build_assignments tip-lookup index --- ...27060500_drop_superseded_eba_tip_index.sql | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/db/migrations/20260727060500_drop_superseded_eba_tip_index.sql diff --git a/packages/db/migrations/20260727060500_drop_superseded_eba_tip_index.sql b/packages/db/migrations/20260727060500_drop_superseded_eba_tip_index.sql new file mode 100644 index 0000000000..19cd9fd012 --- /dev/null +++ b/packages/db/migrations/20260727060500_drop_superseded_eba_tip_index.sql @@ -0,0 +1,35 @@ +-- +goose Up +-- +goose NO TRANSACTION + +-- DROP waits on in-flight lock holders rather than building anything; bound +-- it so it neither hangs unbounded nor dies to a short session default. +SET statement_timeout = '1h'; + +-- Follow-up to 20260727032500 (the additive half): the 4-column +-- idx_env_build_assignments_env_tag_created_build shares this index's exact +-- ordering prefix, so every scan the 3-column copy served runs identically +-- on it — keeping both only doubles write maintenance on a hot-insert +-- table. Merge only after the 4-column index has soaked in production. +DROP INDEX CONCURRENTLY IF EXISTS idx_env_build_assignments_env_tag_created; + +-- The migrator session is reused for subsequent migrations: restore its +-- baseline (scripts/migrator.go sets 3h per connection). +SET statement_timeout = '3h'; + +-- +goose Down +-- +goose NO TRANSACTION + +-- The concurrent rebuild legitimately runs long at this table's size; a +-- mid-build timeout would strand an INVALID index. Rolling back is a +-- deliberate manual operation with an operator present — unbounded on +-- purpose. +SET statement_timeout = 0; + +-- An interrupted CONCURRENTLY build leaves an INVALID index that IF NOT +-- EXISTS would then skip forever — clear any leftover before rebuilding. +DROP INDEX CONCURRENTLY IF EXISTS idx_env_build_assignments_env_tag_created; + +CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_env_build_assignments_env_tag_created + ON public.env_build_assignments (env_id, tag, created_at DESC); + +SET statement_timeout = '3h';