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") # ALTER TABLE `dept_manager` ADD `to_date2` date NOT NULL AFTER `from_date`, # LOCK=NONE # ALTER TABLE `dept_manager` DROP `to_date`, # LOCK=NONE $ 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}) # ALTER TABLE `dept_manager` DROP INDEX `emp_no`, # LOCK=NONE # ALTER TABLE `dept_manager` ADD INDEX `emp_no2` USING btree ( # `emp_no`) # ,LOCK=NONE $ 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