The default dumping strategy for rails is to generate a ruby schema.rb
file.
Having a table created by the following migration. (simplified version)
class CreateOrganisation < ActiveRecord::Migration[7.0]
def change
create_table :organisations do |t|
t.string :name
t.json :settings
end
end
end
It generates the following dump
ActiveRecord::Schema[7.0].define(version: 2022_12_29_082458) do
create_table "organisations", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t|
t.string "name"
t.text "settings", size: :long, collation: "utf8mb4_bin"
t.check_constraint "son_valid(`settings`", name: "organisations_chk_1"
end
Trying to use this dump results in an error. Which isn't strange when you look at the generated constraint code. The MySQL adapter doesn't extract the constraints correctly
t.check_constraint "son_valid(`settings`", name: "organisations_chk_1"
TIP: Don't use the 'json' datatype when MySQL. Event better use Postgres when possible, with it's jsonb column.
(See the next post for a good workaround to use structure.sql
and schema.rb
)