読者です 読者をやめる 読者になる 読者になる

ridgepole+alter .. , lock=none

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

MySQLCREATE INDEXDROP 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