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
基本的にupにテーブル定義、 downにdrop_tableしておけばよい。 実際に動かしてみる。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
これで、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) |