Краткий справочник

Шпаргалка по миграциям Phoenix Ecto

Справочное руководство по миграциям Ecto в Phoenix: создание таблиц, типы колонок, внешние ключи, составные индексы и прямой SQL.

· Опубликовано

Ecto.Migration предоставляет независимый от СУБД DSL для создания и выполнения миграций баз данных.

Команды командной строки для миграций (CLI Migration Commands)

# Генерация файла миграции
mix ecto.gen.migration add_status_to_orders

# Применение всех незавершенных миграций
mix ecto.migrate

# Откат последнего шага миграции
mix ecto.rollback

# Проверка статуса миграций
mix ecto.migrations

DSL определения таблиц (Table Definition DSL)

defmodule MyApp.Repo.Migrations.CreateDocuments do
  use Ecto.Migration

  def change do
    create table(:documents) do
      add :title, :string, size: 100, null: false
      add :body, :text
      add :price, :decimal, precision: 10, scale: 2
      add :views, :integer, default: 0
      add :active, :boolean, default: true, null: false
      add :metadata, :map # JSON / JSONB
      add :published_at, :utc_datetime

      # Внешний ключ со связанным каскадным удалением
      add :author_id, references(:users, on_delete: :delete_all), null: false

      # Автоматическое добавление inserted_at и updated_at
      timestamps()
    end
  end
end

Изменение существующих таблиц (alter)

alter table(:documents) do
  add :subtitle, :string
  modify :title, :string, size: 255
  remove :views
end

Индексы и ограничения (Indices & Constraints)

# Уникальный индекс
create unique_index(:users, [:email])

# Составной индекс с параллельным созданием (PostgreSQL)
create index(:orders, [:user_id, :status], concurrently: true)

# Удаление индекса
drop index(:orders, [:status])

Прямое выполнение SQL (Raw SQL Execution)

# Выполнение произвольных SQL-запросов внутри миграции
execute "CREATE EXTENSION IF NOT EXISTS citext;"

Связанные руководства

Связанные темы