Lustra::Migration::Helper
Constants
TYPE_MAPPING = {"string" => "text", "int32" => "int", "int64" => "bigint", "long" => "bigint", "bigdecimal" => "numeric", "datetime" => "timestamp without time zone"}
Class methods
Instance methods
add_column(table, column, datatype, nullable = false, constraint = nil, default = nil, with_values = false, comment : String | Nil = nil)
Add a column to a specific table
Add check constraint for containment operations Primarily used with geometric bounds but works with any type supporting <@ operator
add_exclusion_constraint(table : String, column : String, operator : String = "&&", name : String | Nil = nil)
Add exclusion constraint using GIST index Commonly used for preventing overlaps in geometric data, time ranges, etc.
add_index(table, columns, name = nil, unique = false, using = nil)
Sourceadd_operation(op : Operation)
Sourceapply(dir : Direction = Lustra::Migration::Direction::Up)
This will apply the migration in a given direction (up or down)
change(dir)
SourceChange a column's comment.
- Pass a String to set comment, or nil to remove it (not auto-reversible).
- Pass a NamedTuple {from: "old", to: "new"} to make the change reversible.
Change a column's default value.
- Pass a SQL literal as String to set the default (e.g. "'guest'", "1", "now()") or nil to drop it.
- Pass a NamedTuple {from: <old>, to: <new>} to make the change reversible.
change_column_type(table, column, from, to)
Sourcecreate_enum(name, e)
Sourcecreate_index(table, column, name = nil, using = nil, unique = false)
Add a column to a specific table
Helper used in migration to create a new table.
Usage:
create_table(:users) do |t|
t.column :first_name, :string
t.column :last_name, :string
t.column :email, :string, unique: true
t.timestamps
end
By default, a column id of type integer will be created as primary key of the table.
This can be prevented using primary: false
create_table(:users, id: false) do |t|
t.column :user_id, :integer, primary: true # Use custom name for the primary key
t.column :first_name, :string
t.column :last_name, :string
t.column :email, :string, unique: true
t.timestamps
end
drop_column(table, column, type)
Sourceirreversible!
Sourcerename_column(table, from, to)
Source