|
|
|
@ -15,10 +15,22 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1] |
|
|
|
|
|
|
|
|
|
private |
|
|
|
|
|
|
|
|
|
def supports_concurrent_reindex? |
|
|
|
|
@supports_concurrent_reindex ||= begin |
|
|
|
|
version = select_one("SELECT current_setting('server_version_num') AS v")['v'].to_i |
|
|
|
|
version >= 12_000 |
|
|
|
|
end |
|
|
|
|
end |
|
|
|
|
|
|
|
|
|
def deduplicate_and_reindex! |
|
|
|
|
deduplicate_preview_cards! |
|
|
|
|
|
|
|
|
|
safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' } |
|
|
|
|
if supports_concurrent_reindex? |
|
|
|
|
safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' } |
|
|
|
|
else |
|
|
|
|
remove_index :preview_cards_statuses, name: :preview_cards_statuses_pkey |
|
|
|
|
add_index :preview_cards_statuses, [:status_id, :preview_card_id], name: :preview_cards_statuses_pkey, algorithm: :concurrently, unique: true |
|
|
|
|
end |
|
|
|
|
rescue ActiveRecord::RecordNotUnique |
|
|
|
|
retry |
|
|
|
|
end |
|
|
|
|