我想使用这样的短语来迁移和更改表。
execute "ALTER TABLE `#{table}` CHANGE `#{column.name}` `#{column.name}` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
但在更改数据库时,表将被锁定。如何在没有停机时间的情况下迁移。
rails5支持这种变通工作?(轨道6似乎支持advisory lock
(
我使用的是mysql5.7
https://blog.saeloun.com/2019/09/09/rails-6-disable-advisory-locks.html#:~:text=Rails%20使用%20an%20咨询%20锁定,服务器%20by%20使用共享%20连接
您可以告诉MySQL在执行此操作时不要锁定表,还可以使用INPLACE算法。
class YourMigration < ActiveRecord::Migration[7.0]
def up
execute <<-SQL.squish
ALTER TABLE your_table
CHANGE column_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci,
ALGORITHM=INPLACE, LOCK=NONE;
SQL
end
def down
execute <<-SQL.squish
ALTER TABLE your_table
CHANGE column_name CHARACTER SET utf8mb4_unicode_ci COLLATE utf8mb4,
ALGORITHM=INPLACE, LOCK=NONE;
SQL
end
end