#strong_migrations error - ValidatePlanAndAccountNotNull & CreatePayV3Models
Running initial migrations on a local server running Postgres 13.4, getting caught with these errors.
ValidatePlanAndAccountNotNull:
ValidatePlanAndAccountNotNull:
=== Dangerous operation detected #strong_migrations ===
Setting NOT NULL on an existing column blocks reads and writes while every row is checked.
Instead, add a check constraint and validate it in a separate migration.
class ValidatePlanAndAccountNotNull < ActiveRecord::Migration[6.1]
def change
add_check_constraint :plans, "name IS NOT NULL", name: "plans_name_null", validate: false
end
end
class ValidateValidatePlanAndAccountNotNull < ActiveRecord::Migration[6.1]
def change
validate_check_constraint :plans, name: "plans_name_null"
end
end
/jumpstart/db/migrate/20210115211740_validate_plan_and_account_not_null.rb:8:in `change'(Skipping the above migration and re-running shows another strong migration error)
CreatePayV3Models:
=== Dangerous operation detected #strong_migrations ===
Adding a column with a non-null default blocks reads and writes while the entire table is rewritten.
Instead, add the column without a default value, then change the default.
class CreatePayV3Models < ActiveRecord::Migration[6.1]
def up
add_column :plans, :interval_count, :integer
change_column_default :plans, :interval_count, 1
end
def down
remove_column :plans, :interval_count
end
end
Then backfill the existing rows in the Rails console or a separate migration with disable_ddl_transaction!.
class BackfillCreatePayV3Models < ActiveRecord::Migration[6.1]
disable_ddl_transaction!
def up
Plan.unscoped.in_batches do |relation|
relation.update_all interval_count: 1
sleep(0.01)
end
end
end
/jumpstart/db/migrate/20210804000959_create_pay_v3_models.rb:4:in `change'Will edit migrations with suggested changes, let me know if there's a better way around this.
Notifications
You’re not receiving notifications from this thread.