Files
notifications-api/migrations/versions/0320_optimise_notifications.py
2020-03-31 15:17:27 +01:00

72 lines
3.3 KiB
Python

"""
Revision ID: 0320_optimise_notifications
Revises: 0319_contact_list_archived
Create Date: 2020-03-26 11:16:12.389524
"""
import os
from alembic import op
revision = '0320_optimise_notifications'
down_revision = '0319_contact_list_archived'
environment = os.environ['NOTIFY_ENVIRONMENT']
def upgrade():
# We like to run this operation on live via the command prompt, to watch the progress and stop if necessary
if environment not in ["live", "production"]:
# Drop indexes notifications - no need to recreate these indexes
op.execute('DROP INDEX IF EXISTS ix_notifications_key_type')
op.execute('DROP INDEX IF EXISTS ix_notifications_api_key_id')
op.execute('DROP INDEX IF EXISTS ix_notifications_notification_status')
op.execute('DROP INDEX IF EXISTS ix_notifications_notification_type')
op.execute('DROP INDEX IF EXISTS ix_notifications_service_id')
# Create new composite indexes
# PLEASE NOTE: that if you create index on production you need to add concurrently to the create statement,
# however we are unable to do that inside a transaction like this upgrade method
ix_notifications_service_id_composite = """
CREATE INDEX ix_notifications_service_id_composite
on notifications (service_id, notification_type, notification_status, created_at)
"""
op.execute(ix_notifications_service_id_composite)
ix_notifications_notification_type_composite = """
CREATE INDEX ix_notifications_notification_type_composite
on notifications (notification_type, notification_status, created_at)
"""
op.execute(ix_notifications_notification_type_composite)
# DROP and CREATE all other indexes
op.execute('DROP INDEX IF EXISTS ix_notifications_client_reference')
op.execute('CREATE INDEX ix_notifications_client_reference ON notifications (client_reference)')
op.execute('DROP INDEX IF EXISTS ix_notifications_created_at')
op.execute('CREATE INDEX ix_notifications_created_at ON notifications (created_at)')
op.execute('DROP INDEX IF EXISTS ix_notifications_job_id')
op.execute('CREATE INDEX ix_notifications_job_id ON notifications (job_id)')
op.execute('DROP INDEX IF EXISTS ix_notifications_reference')
op.execute('CREATE INDEX ix_notifications_reference ON notifications (reference)')
op.execute('DROP INDEX IF EXISTS ix_notifications_service_created_at')
op.execute(
'CREATE INDEX ix_notifications_service_created_at ON notifications (service_id, created_at)')
op.execute('DROP INDEX IF EXISTS ix_notifications_template_id')
op.execute('CREATE INDEX ix_notifications_template_id ON notifications (template_id)')
# Drop indexes notification_history
op.execute('DROP INDEX IF EXISTS ix_notification_history_key_type')
op.execute('DROP INDEX IF EXISTS ix_notification_history_api_key_id')
op.execute('DROP INDEX IF EXISTS ix_notification_history_notification_status')
op.execute('DROP INDEX IF EXISTS ix_notification_history_notification_type')
op.execute('DROP INDEX IF EXISTS ix_notification_history_service_id')
op.execute('DROP INDEX IF EXISTS ix_notification_history_week_created')
def downgrade():
pass