Reset primary keys after swapping events tables

This is required as otherwise newly created events will start with the
wrong ID.
This commit is contained in:
Yorick Peterse 2017-09-11 14:05:13 +02:00
parent 5cc140b202
commit 1e1c075d30
No known key found for this signature in database
GPG Key ID: EDD30D2BEB691AC9
1 changed files with 24 additions and 0 deletions

View File

@ -7,6 +7,10 @@ class SwapEventMigrationTables < ActiveRecord::Migration
# Set this constant to true if this migration requires downtime.
DOWNTIME = false
class Event < ActiveRecord::Base
self.table_name = 'events'
end
def up
rename_tables
end
@ -19,5 +23,25 @@ class SwapEventMigrationTables < ActiveRecord::Migration
rename_table :events, :events_old
rename_table :events_for_migration, :events
rename_table :events_old, :events_for_migration
# Once swapped we need to reset the primary key of the new "events" table to
# make sure that data created starts with the right value. This isn't
# necessary for events_for_migration since we replicate existing primary key
# values to it.
if Gitlab::Database.postgresql?
reset_primary_key_for_postgresql
else
reset_primary_key_for_mysql
end
end
def reset_primary_key_for_postgresql
reset_pk_sequence!(Event.table_name)
end
def reset_primary_key_for_mysql
amount = Event.pluck('COALESCE(MAX(id), 1)').first
execute "ALTER TABLE #{Event.table_name} AUTO_INCREMENT = #{amount}"
end
end