1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flyway代替】DBマイグレーションツール「sqldef」を使用して、Windows(Ubuntu in WSL) + PostgreSQL環境でDBマイグレーションを行う方法

Last updated at Posted at 2024-04-22

はじめに

  • きっかけは以前参画したプロジェクトにて、プロダクトごとにsqldefとFlywayを使い分けてマイグレーションを行っていたが、個人的にはsqldefの方が使いやすかったので、現在参画していのプロジェクトにも導入したいと思ったから。
  • 制約:Linux版のバイナリファイルを使いまわす。
    • 現在参画しているプロジェクトの開発端末はWindows、CI/CD環境はLinux
    • どちらの環境でもLinux版の同じ実行ファイルを使ってマイグレーションを行いたい。

実施環境

  • OS Windows11
  • WSL Ubuntu-22.04
  • DB YugabyteDB v.2.21.0.0-b545 ※ Postgresqlとの互換性あり

使用方法

事前準備

  • WSLが使用できる状態にする
  • Postgresqlが使用できる状態にする

実行ファイルを入手

  • https://github.com/sqldef/sqldef/releasesからお好みのリリースバージョンのpsqldef_linux_amd64.tar.gzをダウンロード
    • 今回はv0.17.5のものを入手
  • WSLを起動し、ダウンロードしたファイルの階層に移動
  • 以下のコマンドで圧縮ファイルを解凍
    tar xf psqldef_linux_amd64.tar.gz

SQLファイルを作成

  • 以下のSQLファイルを作成
01_create_table.sql
CREATE TABLE employee (
  emp_no     CHAR(5)     PRIMARY KEY,
  first_name VARCHAR(15) NOT NULL,
  last_name  VARCHAR(15) NOT NULL,
  age        SMALLINT    NOT NULL
);
  • 上記ファイルを解凍したpsqldefの実行ファイルと同じ階層に配置

sqldefを実行

  • 以下のコマンドを実行し、現状のDBとの差分を確認
    PGPASSWORD={password} ./psqldef -h 127.0.0.1 -p 5433 -U {user_name} {database_name} < 01_create_table.sql --dry-run
出力結果
$ PGPASSWORD=postgres ./psqldef -h 127.0.0.1 -p 5433 -U postgres postgres < 01_create_table.sql --dry-run
-- dry run --
CREATE TABLE employee (
  emp_no     CHAR(5)     PRIMARY KEY,
  first_name VARCHAR(15) NOT NULL,
  last_name  VARCHAR(15) NOT NULL,
  age        SMALLINT    NOT NULL
);
  • 以下のコマンドを実行し、DDLを実行
    PGPASSWORD={password} ./psqldef -h 127.0.0.1 -p 5433 -U {user_name} {database_name} < 01_create_table.sql
出力結果
$ PGPASSWORD=postgres ./psqldef -h 127.0.0.1 -p 5433 -U postgres postgres < 01_create_table.sql
-- Apply --
CREATE TABLE employee (
  emp_no     CHAR(5)     PRIMARY KEY,
  first_name VARCHAR(15) NOT NULL,
  last_name  VARCHAR(15) NOT NULL,
  age        SMALLINT    NOT NULL
);
  • 再度現状のDBとの差分を確認
    PGPASSWORD={password} ./psqldef -h 127.0.0.1 -p 5433 -U {user_name} {database_name} < 01_create_table.sql --dry-run
出力結果
$ PGPASSWORD=postgres ./psqldef -h 127.0.0.1 -p 5433 -U postgres postgres < 01_create_table.sql
-- Nothing is modified --

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?