🍚

FlyPostgresに対してマイグレーションを実行する

2023/06/01に公開

Remix を使って個人開発しているyutaです。

Fly.ioにデプロイし、DB はFly Postgresを使っています。
ORM はPrismaを使っています。
マイグレーションを作成して Postgres のテーブルに反映するのにめちゃくちゃ手間取ったので、反映方法を書いておきます(備忘録)。

前提条件

以下の前提条件をクリアしているものとして解説していきます。

実行環境

  • M1 Macbook Air Ventura 13.0
  • node v20.2.0
  • npm 9.6.7

結論

Fly Postgres にプロキシ接続した状態でマイグレーションを行います。

以下手順。

  1. .env に DATABASE_URL SHADOW_DATABASE_URL を設定します。
.env
# DATABASE_URLとSHADOW_DATABASE_URLは同じ
DATABASE_URL="postgres://postgres:パスワード@localhost:5432"
// SHADOW_DATABASE_URL="postgres://postgres:パスワード@localhost:5432"
  1. schema.prisma に SHADOW_DATABASE_URL を追加
schema.prisma
datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
//   shadowDatabaseUrl = env("SHADOW_DATABASE_URL")
}

※ shadowDatabaseUrl に url と同じ URL を記入すると、npx prisma migrate devが失敗します。リンク

  1. ターミナルで Fly Postgres にプロキシ接続(ドキュメントはこちら
flyctl proxy 5432 -a <postgres-app-name>
  1. 別ターミナルを開いてマイグレーションを作成
npx prisma migrate dev --name init
  1. Fly Postgres に展開
npx prisma migrate deploy
  1. テーブルが作成されたか確認

以下のコマンドで Fly Postgres の DB に接続できます。

fly postgres connect -a <postgres-app-name>

また、Database Clientを使うと便利です。
この拡張機能を使う場合もflyctl proxy 5432 -a <postgres-app-name>でプロキシ接続してから DB に接続してください。

最後に

まとめられた記事が見つからなかったので、マイグレーションするのに手間取りました。
皆さんの作業の一助になれば幸いです。

Discussion