📖

entでのDBマイグレーション

2022/05/23に公開

https://entgo.io/ja/blog/2022/03/14/announcing-versioned-migrations を読んでみた。

概要

entでも従来のALTER TABLEを記載したマイグレーションファイルを管理するやり方ができるようになった、とのこと

前提

RDBMSを使っている場合に、テーブル定義を変更する場合のALTER TABLE文をバージョン管理することが多い

例えば以下は https://github.com/pressly/goose の例

20180102050000_alter_event_log_email.sql

-- +goose Up
-- SQL in section 'Up' is executed when this migration is applied
ALTER TABLE event_log_email MODIFY COLUMN
  event ENUM('click', 'delivered', 'open', 'deferred', 'dropped', 'bounce', 'block') NOT NULL;

-- seed
UPDATE event_log_email SET event = 'dropped' WHERE event = '';

-- +goose Down
-- SQL section 'Down' is executed when this migration is rolled back
ALTER TABLE event_log_email MODIFY COLUMN
  event ENUM('click', 'delivered', 'open', 'deferred', 'drop', 'bounce', 'block') NOT NULL;

entでのスキーマ管理

https://entgo.io/ja/blog/2022/03/14/announcing-versioned-migrations#generating-versioned-migration-files にあるように、Goのコードでスキーマ定義を管理する。

余談

entではAtlasというマイグレーションエンジンを内部的に使っているらしい。このAtlasはHCLを使ってテーブル定義をTerraformのように定義できる。
https://entgo.io/ja/blog/2022/01/20/announcing-new-migration-engine

Discussion