aprs.me/priv/repo/migrations/20250715140830_remove_duplicate_indexes.exs

53 lines
1.7 KiB
Elixir

defmodule Aprsme.Repo.Migrations.RemoveDuplicateIndexes do
use Ecto.Migration
def up do
# Remove duplicate indexes to save 2.9GB of disk space
# 1. Remove packets_id_idx (1324 MB) - redundant with primary key packets_pkey
# The primary key already provides an index on the id column
execute("DROP INDEX IF EXISTS packets_id_idx")
# 2. Remove packets_location_spatial_idx (1060 MB) - redundant with packets_location_selective_idx
# The selective index is more specific and provides better performance
execute("DROP INDEX IF EXISTS packets_location_spatial_idx")
# 3. Remove packets_received_at_index (550 MB) - redundant with packets_received_at_idx
# Both indexes serve the same purpose
execute("DROP INDEX IF EXISTS packets_received_at_index")
# Also check for other potential duplicates mentioned in earlier migrations
# Replaced by more specific indexes
execute("DROP INDEX IF EXISTS packets_location_idx")
# Log the cleanup
execute("""
DO $$
BEGIN
RAISE NOTICE 'Duplicate indexes removed successfully. Estimated space saved: ~2.9GB';
END $$;
""")
end
def down do
# Recreate indexes if needed (though they are redundant)
# Recreate packets_id_idx
execute("""
CREATE INDEX CONCURRENTLY IF NOT EXISTS packets_id_idx
ON packets(id)
""")
# Recreate packets_location_spatial_idx
execute("""
CREATE INDEX CONCURRENTLY IF NOT EXISTS packets_location_spatial_idx
ON packets USING GIST (location)
""")
# Recreate packets_received_at_index (using original name from migration)
execute("""
CREATE INDEX CONCURRENTLY IF NOT EXISTS packets_received_at_index
ON packets(received_at)
""")
end
end