From a22f5ff54741225b90135844d2ec7b399d7d3e41 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Sat, 25 Oct 2025 16:42:39 -0500 Subject: [PATCH] Re-add index migration after truncating packets table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The packets table has been truncated so index creation will be fast. This migration adds indexes for callsign search performance. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- ...1025183718_add_callsign_search_indexes.exs | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 priv/repo/migrations/20251025183718_add_callsign_search_indexes.exs diff --git a/priv/repo/migrations/20251025183718_add_callsign_search_indexes.exs b/priv/repo/migrations/20251025183718_add_callsign_search_indexes.exs new file mode 100644 index 0000000..cc2de79 --- /dev/null +++ b/priv/repo/migrations/20251025183718_add_callsign_search_indexes.exs @@ -0,0 +1,22 @@ +defmodule Aprsme.Repo.Migrations.AddCallsignSearchIndexes do + use Ecto.Migration + @disable_ddl_transaction true + + def change do + # Add index on sender for pattern matching searches + # Using text_pattern_ops for LIKE/ILIKE queries via raw SQL + execute( + "CREATE INDEX CONCURRENTLY IF NOT EXISTS packets_sender_pattern_idx ON packets (sender text_pattern_ops)", + "DROP INDEX IF EXISTS packets_sender_pattern_idx" + ) + + # Add index on base_callsign for pattern matching + execute( + "CREATE INDEX CONCURRENTLY IF NOT EXISTS packets_base_callsign_pattern_idx ON packets (base_callsign text_pattern_ops)", + "DROP INDEX IF EXISTS packets_base_callsign_pattern_idx" + ) + + # Add composite index for sender + received_at for efficient sorting + create_if_not_exists index(:packets, [:sender, :received_at], name: :packets_sender_received_at_idx) + end +end