Fix `AddUniqueIndexOnPreviewCardsStatuses` migration requiring PostgreSQL 12+ in some cases (#26737)

main
Claire 2023-08-31 15:47:30 +02:00 committed by GitHub
parent 6b58cfd8dd
commit 1471be8225
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 1 deletions

View File

@ -15,10 +15,22 @@ class AddUniqueIndexOnPreviewCardsStatuses < ActiveRecord::Migration[6.1]
private 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! def deduplicate_and_reindex!
deduplicate_preview_cards! deduplicate_preview_cards!
if supports_concurrent_reindex?
safety_assured { execute 'REINDEX INDEX CONCURRENTLY preview_cards_statuses_pkey' } 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 rescue ActiveRecord::RecordNotUnique
retry retry
end end