notes :
ruby script\generate migration ma_migration
crée ma_migration dans le ss rep migrate
on peut y coller le code qui est dans schema.rb (voir le #1), c'est un bon début
Migrer la base de données
rake migrate est déprécié --> rake db:migrate
la table est recrée (ah oui, sans les données oui.)
exemple 2 :
C:\apc_demo\InstantRails1.7\InstantRails\rails_apps\rooracle>ruby script\generat
e migration NewCol13June2007
exists db/migrate
create db/migrate/002_new_col13_june2007.rb
dans le fichier on ajoute une colonne :
rajout de la ligne t.column "comments", :string, :limit => 4000
aux lignes de création de la table copiées/collées de schema.rb vers migrate/002_new_col13_june2007.rb
ensuite rake db:migrate
C:\apc_demo\InstantRails1.7\InstantRails\rails_apps\rooracle>rake db:migrate
(in C:/apc_demo/InstantRails1.7/InstantRails/rails_apps/rooracle)
== NewCol13June2007: migrating ================================================
-- create_table("books", {:force=>true})
-> 1.8600s
== NewCol13June2007: migrated (1.8750s) =======================================
la console dit :
←[4;36;1mSQL (0.000000)←[0m ←[0;1mOCIError: ORA-00955: ce nom d'objet existe
déjà: CREATE TABLE schema_info (version NUMBER(38))←[0m
←[4;35;1mSQL (0.000000)←[0m ←[0mOCIError: ORA-00955: ce nom d'objet existe d
éjà: CREATE TABLE schema_info (version NUMBER(38))←[0m
←[4;36;1mSQL (0.000000)←[0m ←[0;1mSELECT version FROM schema_info←[0m
←[4;35;1mSQL (0.000000)←[0m ←[0mSELECT version FROM schema_info←[0m
Migrating to NewCol13June2007 (2)
←[4;36;1mSQL (1.281000)←[0m ←[0;1mDROP TABLE books←[0m
←[4;35;1mSQL (0.344000)←[0m ←[0mDROP SEQUENCE books_seq←[0m
←[4;36;1mSQL (0.172000)←[0m ←[0;1mCREATE TABLE books (id NUMBER(38) NOT NULL
PRIMARY KEY, title VARCHAR2(4000) DEFAULT NULL, text VARCHAR2(4000) DEFAULT NUL
L, comments VARCHAR2(4000) DEFAULT NULL) ←[0m
←[4;35;1mSQL (0.032000)←[0m ←[0mCREATE SEQUENCE books_seq START WITH 10000←[
0m
←[4;36;1mSQL (0.000000)←[0m ←[0;1mUPDATE schema_info SET version = 2←[0m
←[4;35;1mSQL (0.000000)←[0m ←[0mSELECT * FROM schema_info←[0m
←[4;36;1mSQL (0.078000)←[0m ←[0;1mselect lower(table_name) from user_tables←
[0m
←[4;35;1mSQL (0.015000)←[0m ←[0m select column_name as name, data_type as sq
l_type, data_default, nullable,
decode(data_type, 'NUMBER', data_precision,
'FLOAT', data_precision,
'VARCHAR2', data_length,
null) as limit,
decode(data_type, 'NUMBER', data_scale, null) as scale
from all_tab_columns
where owner = 'ROOR'
and table_name = 'BOOKS'
order by column_id
←[0m
←[4;36;1mPrimary Key (0.219000)←[0m ←[0;1m select cc.column_name
from all_constraints c, all_cons_columns cc
where c.owner = 'ROOR'
and c.table_name = 'BOOKS'
and c.constraint_type = 'P'
and cc.owner = c.owner
and cc.constraint_name = c.constraint_name
←[0m
←[4;35;1mSQL (0.547000)←[0m ←[0m SELECT lower(i.index_name) as index_name, i
.uniqueness, lower(c.column_name) as column_name
FROM user_indexes i, user_ind_columns c
WHERE i.table_name = 'BOOKS'
AND c.index_name = i.index_name
AND i.index_name NOT IN (SELECT uc.index_name FROM user_constraints uc WHERE uc
.constraint_type = 'P')
ORDER BY i.index_name, c.column_position
←[0m
maintenant on a une nouvelle colonne (et plus de lignes!)