PgHero
No long running queries
Connections healthy 8
Vacuuming healthy
No columns near integer overflow
No invalid indexes or constraints
8 duplicate indexes
No suggested indexes
No slow queries

Duplicate Indexes

These indexes exist, but aren’t needed. Remove them for faster writes.

rails generate migration remove_unneeded_indexes

And paste

remove_index :accounts, name: "ix_accounts_user_id", column: :user_id
remove_index :bonus_accruals, name: "ix_bonus_accruals_account_id", column: :account_id
remove_index :deposit_addresses, name: "ix_deposit_addresses_user_id", column: :user_id
remove_index :email_otp_challenges, name: "ix_email_otp_challenges_user_id", column: :user_id
remove_index :interest_accruals, name: "ix_interest_accruals_account_id", column: :account_id
remove_index :ledger_entries, name: "ix_ledger_entries_account_id", column: :account_id
remove_index :user_devices, name: "ix_user_devices_user_id", column: :user_id
remove_index :users, name: "ix_users_email", column: :email
Details
On accounts
ix_accounts_user_id (user_id)
is covered by
uq_accounts_user_type (user_id, account_type)
On bonus_accruals
ix_bonus_accruals_account_id (account_id)
is covered by
uq_bonus_account_campaign (account_id, campaign_code)
On deposit_addresses
ix_deposit_addresses_user_id (user_id)
is covered by
uq_deposit_addresses_user_provider_network (user_id, provider_id, network)
On email_otp_challenges
ix_email_otp_challenges_user_id (user_id)
is covered by
ix_email_otp_challenges_user_purpose (user_id, purpose)
On interest_accruals
ix_interest_accruals_account_id (account_id)
is covered by
uq_interest_account_period (account_id, period_date)
On ledger_entries
ix_ledger_entries_account_id (account_id)
is covered by
ix_ledger_entries_account_created (account_id, created_at)
On user_devices
ix_user_devices_user_id (user_id)
is covered by
uq_user_devices_user_fp (user_id, fingerprint_hash)
On users
ix_users_email (email)
is covered by
uq_users_email (email)