Migration
最近Railsで開発していて、migrationを使い初めてみた。 (以前Rails使っていた頃は無かった気がする・・・) 激しく便利。軽くメモ代わりに。 データベースの定義(DDL)をRails側で実装出来る機能ですが何が嬉しいかといえば、- DDLをバージョン管理できる
- いつでも任意のバージョンに戻す事ができる
- modelさえ作ってしまえばテストデータをrubyで書いてinsertできる
使い方
生成はscript/generateで。 ありがちなusersというテーブルを生成。こうすると、”001_create_users.rb”というファイルがdb/migrateに出来ているので、 テキストエディタで定義を編集。 self.upとself.downというメソッドがあるので、 self.upはバージョンアップ時に実行され、 self.downはダウングレード時に実行されるのね。$ ruby script/generate migrate create_users
class CreateUsers < ActiveRecord::Migration
def self.up
options = {
:options => "ENGINE=innodb DEFAULT CHARSET=utf8"
}
create_table(:users, options) {|table|
table.column :name, :integer
table.column :password, :string, limt => 50
table.column :birth, :date
table.column :roll, :integer
table.column :time_stamp, :datetime
}
end
def self.down
drop_table : users
end
end
基本的にupにテーブル定義、
downにdrop_tableしておけばよい。
実際に動かしてみる。
これで、DBにusersテーブルが出来ているハズ。 逆にダウングレードする場合は$ rake migrate
としてあげればOK。 バージョンってのは、generateしたときに振られる "001"とかの連番。$ rake migrate VERSION=[バージョン番号]
スキーマ命令
スキーマ定義に使える命令をメモ代わりに- create_table(name, options) テーブルを作成する。
- drop_table(name) テーブルを削除する。
- add_column(table_name, column_name, type, options) カラムを追加する。
- rename_column(table_name, column_name, new_column_name) カラム名の変更
- change_column(table_name, column_name, type, options) カラム属性の変更
- remove_column(table_name, column_name) カラムの削除
- add_index(table_name, column_name): インデックスを追加する。
- remove_index(table_name, column_name): インデックスを削除する。
定義に使える型
今のところ、PostgreSQLとMySQLのみ対応らしい。| 抽象表現 | rubyでの型 | PostgreSQL | MySQL |
| :primary_key | Fixnum | serial primary key | int(11) DEFAULT NULL auto_increment PRIMARY KEY |
| :string | String | character varying(255) | varchar(255) |
| :text | String | text | text |
| :integer | Fixnum | integer | int(11) |
| :float | Float | float | float |
| :datetime | Time | timestamp | datetime |
| :timestamp | Time | timestamp | datetime |
| :time | Time | timestamp | datetime |
| :date | Date | date | date |
| :binary | String | bytea | blob |
| :boolean | Object | boolean | tinyint(1) |