💾

PlanetScale から Fly.io の Postgres に移行した

2024/03/08に公開

その時のPR

https://github.com/moeyashi/discord-mk8d-nita-record/pull/51

要約

  • アプリケーションのコードを書き換えた
  • pscale database dump でデータexport
  • flyctl proxy でローカルからデータimport

なぜ?

PlanetScaleの無料枠が廃止されるとのことで、趣味で動かしているDiscord BOTが依存していたため別のDBを探すことに。Discord BOT自体がFly.ioで動いていたのでDBもそちらに載せることに。

手順メモ

後から記事書いているので途中うろ覚えかも、、、2hくらいで終わりました。

  1. アプリケーションのコード書き換え
    @planetscale/databaseを使ってクエリ発行していたので、postgresに書き換え。コード量も多くないしMySQLに依存しているSQLがなかったので簡単に書き換え完了。
  2. Fly.ioにPostgresのインスタンスを作成
    https://fly.io/docs/postgres/ を見ながら作業。漢のサーバー1台構成。
  3. テーブルを作成
    atlasで管理していたので、atlas schema applyでエラー直しつつ実行。
    • 直したエラー
      • mediumint -> integer postgresではmediumintは使えない
      • integer.unsignedを削除 postgresでは使えない
      • schema.charset,collateを削除 postgresでは使えない。今のテーブル状況で気にする必要がなかったので代案は探していない。
    • もともとpublic,repmgrのスキーマがあるのでこれは残しておくように。またメインのテーブルはpublicスキーマに作成するように。
  4. アプリケーションをメンテナンス中に
    データ整合性を取るため。無停止にしなくていいのは楽ですね。
  5. pscale database dump でデータexport
  6. exportされたデータをpostgresで使えるように修正
    テーブル名・列名がバッククォートで、文字列値がダブルクォーテーションで囲われているのでそれぞれ空文字・シングルクォーテーションに置換
  7. 修正したデータをpostgresに流し込み

Discussion