diff --git a/priv/repo/migrations/20250707171625_add_count_optimization_index.exs b/priv/repo/migrations/20250707171625_add_count_optimization_index.exs index d41edc7..0730daa 100644 --- a/priv/repo/migrations/20250707171625_add_count_optimization_index.exs +++ b/priv/repo/migrations/20250707171625_add_count_optimization_index.exs @@ -5,8 +5,9 @@ defmodule Aprsme.Repo.Migrations.AddCountOptimizationIndex do def up do # Add a partial index on id that will be used for COUNT(*) queries # This creates a small, fast index that PostgreSQL can use for counting + # Skip if already exists (from OptimizeInitialIndexCreation migration) execute """ - CREATE INDEX CONCURRENTLY IF NOT EXISTS packets_count_idx + CREATE INDEX IF NOT EXISTS packets_count_idx ON packets (id) WHERE id IS NOT NULL """ diff --git a/priv/repo/migrations/20250710230644_optimize_initial_index_creation.exs b/priv/repo/migrations/20250710230644_optimize_initial_index_creation.exs new file mode 100644 index 0000000..098ced2 --- /dev/null +++ b/priv/repo/migrations/20250710230644_optimize_initial_index_creation.exs @@ -0,0 +1,21 @@ +defmodule Aprsme.Repo.Migrations.OptimizeInitialIndexCreation do + use Ecto.Migration + @disable_ddl_transaction true + + def up do + # Drop and recreate the count optimization index more efficiently + execute "DROP INDEX IF EXISTS packets_count_idx" + + # Use a simpler approach - just create the index normally for initial setup + # The CONCURRENTLY option is mainly useful in production with live data + execute """ + CREATE INDEX packets_count_idx + ON packets (id) + WHERE id IS NOT NULL + """ + end + + def down do + execute "DROP INDEX IF EXISTS packets_count_idx" + end +end