Ridgepole v0.6.4で、ALTER文にLOCK=NONE
とか付けられるようにしました。
$ ridgepole -a -c '{adapter: mysql2, database: employees}' --alter-extra="LOCK=NONE" --dry-run
Apply `Schemafile` (dry-run)
add_column("dept_manager", "to_date2", :date, {:null=>false, :after=>"from_date"})
remove_column("dept_manager", "to_date")
$ ridgepole -a -c '{adapter: mysql2, database: employees}' --alter-extra="LOCK=NONE" --debug
Apply `Schemafile`
...
-- add_column("dept_manager", "to_date2", :date, {:null=>false, :after=>"from_date"})
(42.2ms) ALTER TABLE `dept_manager` ADD `to_date2` date NOT NULL AFTER `from_date`,LOCK=NONE
-> 0.0428s
-- remove_column("dept_manager", "to_date")
(46.9ms) ALTER TABLE `dept_manager` DROP `to_date`,LOCK=NONE
-> 0.0471s
MySQLのCREATE INDEX
・DROP INDEX
については、ALTER文を使うように指示するオプションを追加しました。
$ ridgepole -a -c '{adapter: mysql2, database: employees}' --alter-extra="LOCK=NONE" --mysql-use-alter --dry-run
Apply `Schemafile` (dry-run)
remove_index("dept_manager", {:name=>"emp_no"})
add_index("dept_manager", ["emp_no"], {:name=>"emp_no2", :using=>:btree})
$ ridgepole -a -c '{adapter: mysql2, database: employees}' --alter-extra="LOCK=NONE" --mysql-use-alter --debug
Apply `Schemafile`
...
-- remove_index("dept_manager", {:name=>"emp_no"})
(19.2ms) ALTER TABLE `dept_manager` DROP INDEX `emp_no`,LOCK=NONE
-> 0.0200s
-- add_index("dept_manager", ["emp_no"], {:name=>"emp_no2", :using=>:btree})
(23.4ms) ALTER TABLE `dept_manager` ADD INDEX `emp_no2` USING btree (`emp_no`),LOCK=NONE
-> 0.0243s