fix(migration): make index migration truly idempotent
This commit is contained in:
parent
eb9c6760b9
commit
7a17535600
@ -140,23 +140,31 @@ getMissingMigrations = do
|
||||
|
||||
|
||||
migrateManual :: Migration
|
||||
migrateManual =
|
||||
addMigrations
|
||||
[ (False, "CREATE INDEX IF NOT EXISTS course_application_file_content ON course_application_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS material_file_content ON material_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS course_news_file_content ON course_news_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS sheet_file_content ON sheet_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS course_app_instruction_file_content ON course_app_instruction_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS allocation_matching_log ON allocation_matching (log)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS submission_file_content ON submission_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS session_file_content ON session_file (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS file_lock_content ON file_lock (content)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS user_lower_display_email ON \"user\" (lower(display_email))")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS user_lower_email ON \"user\" (lower(email))")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS user_lower_ident ON \"user\" (lower(ident))")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS submission_sheet ON submission (sheet)")
|
||||
, (False, "CREATE INDEX IF NOT EXISTS submission_edit_submission ON submission_edit (submission)")
|
||||
migrateManual = do
|
||||
mapM_ (uncurry addIndex)
|
||||
[ ("course_application_file_content", "CREATE INDEX course_application_file_content ON course_application_file (content)" )
|
||||
, ("material_file_content", "CREATE INDEX material_file_content ON material_file (content)" )
|
||||
, ("course_news_file_content", "CREATE INDEX course_news_file_content ON course_news_file (content)" )
|
||||
, ("sheet_file_content", "CREATE INDEX sheet_file_content ON sheet_file (content)" )
|
||||
, ("course_app_instruction_file_content", "CREATE INDEX course_app_instruction_file_content ON course_app_instruction_file (content)")
|
||||
, ("allocation_matching_log", "CREATE INDEX allocation_matching_log ON allocation_matching (log)" )
|
||||
, ("submission_file_content", "CREATE INDEX submission_file_content ON submission_file (content)" )
|
||||
, ("session_file_content", "CREATE INDEX session_file_content ON session_file (content)" )
|
||||
, ("file_lock_content", "CREATE INDEX file_lock_content ON file_lock (content)" )
|
||||
, ("user_lower_display_email", "CREATE INDEX user_lower_display_email ON \"user\" (lower(display_email))" )
|
||||
, ("user_lower_email", "CREATE INDEX user_lower_email ON \"user\" (lower(email))" )
|
||||
, ("user_lower_ident", "CREATE INDEX user_lower_ident ON \"user\" (lower(ident))" )
|
||||
, ("submission_sheet", "CREATE INDEX submission_sheet ON submission (sheet)" )
|
||||
, ("submission_edit_submission", "CREATE INDEX submission_edit_submission ON submission_edit (submission)" )
|
||||
]
|
||||
where
|
||||
addIndex :: Text -> Sql -> Migration
|
||||
addIndex ixName ixDef = do
|
||||
res <- lift $ lift [sqlQQ|SELECT EXISTS (SELECT 1 FROM pg_indexes WHERE schemaname = current_schema() AND indexname = #{ixName})|]
|
||||
alreadyDefined <- case res of
|
||||
[Single e] -> return e
|
||||
_other -> return True
|
||||
unless alreadyDefined $ addMigration False ixDef
|
||||
|
||||
|
||||
{-
|
||||
|
||||
Loading…
Reference in New Issue
Block a user