fix(migration): make index migration truly idempotent

This commit is contained in:
Gregor Kleen 2020-08-02 14:08:01 +02:00
parent eb9c6760b9
commit 7a17535600

View File

@ -140,23 +140,31 @@ getMissingMigrations = do
migrateManual :: Migration migrateManual :: Migration
migrateManual = migrateManual = do
addMigrations mapM_ (uncurry addIndex)
[ (False, "CREATE INDEX IF NOT EXISTS course_application_file_content ON course_application_file (content)") [ ("course_application_file_content", "CREATE INDEX course_application_file_content ON course_application_file (content)" )
, (False, "CREATE INDEX IF NOT EXISTS material_file_content ON material_file (content)") , ("material_file_content", "CREATE INDEX material_file_content ON material_file (content)" )
, (False, "CREATE INDEX IF NOT EXISTS course_news_file_content ON course_news_file (content)") , ("course_news_file_content", "CREATE INDEX course_news_file_content ON course_news_file (content)" )
, (False, "CREATE INDEX IF NOT EXISTS sheet_file_content ON sheet_file (content)") , ("sheet_file_content", "CREATE INDEX sheet_file_content ON sheet_file (content)" )
, (False, "CREATE INDEX IF NOT EXISTS course_app_instruction_file_content ON course_app_instruction_file (content)") , ("course_app_instruction_file_content", "CREATE INDEX course_app_instruction_file_content ON course_app_instruction_file (content)")
, (False, "CREATE INDEX IF NOT EXISTS allocation_matching_log ON allocation_matching (log)") , ("allocation_matching_log", "CREATE INDEX allocation_matching_log ON allocation_matching (log)" )
, (False, "CREATE INDEX IF NOT EXISTS submission_file_content ON submission_file (content)") , ("submission_file_content", "CREATE INDEX submission_file_content ON submission_file (content)" )
, (False, "CREATE INDEX IF NOT EXISTS session_file_content ON session_file (content)") , ("session_file_content", "CREATE INDEX session_file_content ON session_file (content)" )
, (False, "CREATE INDEX IF NOT EXISTS file_lock_content ON file_lock (content)") , ("file_lock_content", "CREATE INDEX file_lock_content ON file_lock (content)" )
, (False, "CREATE INDEX IF NOT EXISTS user_lower_display_email ON \"user\" (lower(display_email))") , ("user_lower_display_email", "CREATE INDEX user_lower_display_email ON \"user\" (lower(display_email))" )
, (False, "CREATE INDEX IF NOT EXISTS user_lower_email ON \"user\" (lower(email))") , ("user_lower_email", "CREATE INDEX user_lower_email ON \"user\" (lower(email))" )
, (False, "CREATE INDEX IF NOT EXISTS user_lower_ident ON \"user\" (lower(ident))") , ("user_lower_ident", "CREATE INDEX user_lower_ident ON \"user\" (lower(ident))" )
, (False, "CREATE INDEX IF NOT EXISTS submission_sheet ON submission (sheet)") , ("submission_sheet", "CREATE INDEX submission_sheet ON submission (sheet)" )
, (False, "CREATE INDEX IF NOT EXISTS submission_edit_submission ON submission_edit (submission)") , ("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
{- {-