openstreetmap-website/db/migrate/014_move_to_innodb.rb
Gabriel Ebner 6ae23bed90 split_node_tags:
- Use InnoDB.
  - Put version column on the current_* tables.
  - Use transactions (untested).
2008-05-03 16:27:49 +00:00

29 lines
895 B
Ruby

class MoveToInnodb < ActiveRecord::Migration
@@conv_tables = ['nodes', 'ways', 'way_tags', 'way_nodes',
'current_way_nodes', 'relation_members', 'relations',
'relation_tags', 'current_relation_tags']
@@ver_tbl = ['nodes', 'ways', 'relations']
def self.up
execute 'DROP INDEX current_way_tags_v_idx ON current_way_tags'
execute 'DROP INDEX current_relation_tags_v_idx ON current_relation_tags'
@@ver_tbl.each { |tbl|
change_column tbl, "version", :bigint, :limit => 20, :null => false
}
@@conv_tables.each { |tbl|
execute "ALTER TABLE #{tbl} ENGINE = InnoDB"
}
@@ver_tbl.each { |tbl|
add_column "current_#{tbl}", "version", :bigint, :limit => 20, :null => false
execute "UPDATE current_#{tbl} SET version = " +
"(SELECT max(version)+1 FROM #{tbl} WHERE #{tbl}.id = current_#{tbl}.id)"
}
end
def self.down
end
end