SupabaseデータベースのフライウェイとGithubアクションの移行方法


オープンソース技術に完全に組み込まれている.Supabase GoogleのFirebaseへの今後の代替手段です.supabaseとfirebaseの間の1つの明確な違いは、彼らが持続し、データを管理する方法です.FireBaseはFireStoreを使用していますが、Webインターフェイスを介してのみ設定できるNoSQLドキュメントデータベースでは、Supabaseはフードの下にPostgresデータベースを使用します.
プロジェクトを設定すると、プロジェクトのデータベースにSQLステートメントをすばやく実行するために使用できるSQLコンソールを構築します.新しいプロジェクトで、それはいくつかをかき立てるために誘惑ですCREATE TABLE ステートメントとそれを持っている.
そして、あなたがsupabaseで実験しているならば、supabaseのSQLコンソールを使用してください.結局のところ、それは非常によく動作し、手ダウン、料理を得るための最速の方法です.しかし、あなたが生産の光を見るプロジェクトに取り組んでいるならば、あなたのデータベース・スキーマをより確実に移行するために、フライウェイのようなツールを使用することを考えてください.
この投稿では、変更がリポジトリにプッシュされるたびに、Supabaseデータベースに対するフライウェイ移行を実行するGithubアクションを設定します.これは、あなたのコードと一緒にマイグレーションを格納し、常にあなたのビジネスロジックを同期してデータベースを維持することができます.

データベース接続情報の検索


あなたは、データベースのホスト、ポート、ユーザ名、パスワード、およびデータベース名をフライウェイを実行する必要があります.Supabaseでは、“設定”と“データベースをクリックして、この情報を見つけることができます.”

データベースの設定ページでは、必要なすべての情報を“接続情報”というタイトルのボックスを見つけるでしょう.セキュリティ上の理由から、データベースのパスワードはここには記載されていません.プロジェクトを作成すると、supabaseが入力します.

単純なフライウェイの移行


フライウェイの移行はSQLファイルに過ぎません.移行はデータベーススキーマをバージョン管理するために使用されますので、これらのファイルは特定の命名規則を遵守しなければなりません.フライウェイは素晴らしい入門書を持っていますnaming SQL-based migrations .
我々の目的のためにprofile 3列の表:user_id 登録ユーザーのIDの参照username , and email .
ファイルを作成しましょうV1__create_table_profile.sql ディレクトリにmigrations . The migrations ディレクトリはリポジトリのルートディレクトリに置かれます.
-- migrations/V1__create_table_profile.sql
CREATE TABLE public.profile (
  user_id uuid REFERENCES auth.users NOT NULL PRIMARY KEY,
  username TEXT NULL,
  email TEXT NULL
);
これらの移行の場所を変更したい場合は、以下のようにGithubワークフローの設定を変更してください.

フライウェイを走らせるためにGithubアクションを書く


我々が変化を変えるときはいつでもmigrations ディレクトリは、私たちは私たちのsupabaseデータベースに対してそれらを実行するgithubアクションをします.
リポジトリでは、.github/workflows/migrate.yml 次のコンテンツを使用します.
name: 'Migrate database schema'

on:
  push:
    branches:
      - main

jobs:
  migrate-database:
    name: Run Flyway migrations
    runs-on: ubuntu-20.04
    env:
      SUPABASE_HOST: db.YOUR_SUPABASE_DATABASE_HOST.supabase.co
      SUPABASE_PORT: 5432
      SUPABASE_USER: postgres
      SUPABASE_DB: postgres
    steps:
      - uses: actions/checkout@v2
      - run: >-
          docker run --rm
          --volume ${{ github.workspace }}/migrations:/flyway/sql:ro
          flyway/flyway:7.12.1-alpine
          -url="jdbc:postgresql://${{ env.SUPABASE_HOST }}:${{ env.SUPABASE_PORT }}/${{ env.SUPABASE_DB }}?sslmode=require"
          -user="${{ env.SUPABASE_USER }}"
          -password="${{ secrets.SUPABASE_PASS }}"
          migrate
最初の行はワークフローの名前を定義します.
name: 'Migrate database schema'
次に、このワークフローをトリガーするイベントを定義します.ここでは、ワークフローはmain :
on:
  push:
    branches:
      - main
仕事migrate-database つの環境変数を定義しますSUPABASE_HOST , SUPABASE_PORT , SUPABASE_USER , SUPABASE_DB . あなたがsupabaseのデータベース設定ページで見つけた接続情報に従ってそれらを変えるようにしてください.
このジョブはまずリポジトリをチェックし、docker コマンド.このコマンドはflyway:flyway マウントするイメージmigrations コンテナにディレクトリを移動し、環境変数を介して設定されたデータベースに対して移行を実行します.
データベースのパスワードは秘密ですのでencrypted secret アクセスするには:
-password="${{ secrets.SUPABASE_PASS }}"
秘密を作成してくださいSUPABASE_PASS リポジトリの設定でデータベースのパスワードを格納します.
すべてをコミットし、変更をリポジトリにプッシュします.ワークフローが実行されると、データベーススキーマが更新され、新しいprofile データベース内の表.

回収する


なぜ私はフライウェイを使用する必要がありますか?
  • データベーススキーマへの変更は繰り返し可能になります.これは、新しい環境を設定するときに便利です.
  • データベーススキーマは、アプリケーションと一緒に進化します.
  • どのようにあなたのデータベースのように見えるコードは、それとの相互作用がある.
  • 私たちのしたこと
  • Supabase UIのデータベース設定ページからデータベース接続情報を取得します.
  • 単純な滑走路のSQL移行を作成migrations/V1__create_table_profile.sql , はprofile 表.
  • 1つの仕事と呼ばれるgithubワークフローを加えましたmigrate-database これは、フライウェイを使用して、すべての移行を実行するmigrations Supabaseデータベースに対するディレクトリ.