Skip to content

Instantly share code, notes, and snippets.

@CyberRex0
Last active August 5, 2023 14:47
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save CyberRex0/a42c99f9299a9385cfc6ede87185da27 to your computer and use it in GitHub Desktop.
Save CyberRex0/a42c99f9299a9385cfc6ede87185da27 to your computer and use it in GitHub Desktop.

注: コンテナは止めておくこと。

Step1 docker-compose.ymlの編集

docker-compose.ymlを開き、dbのイメージをpostgres:15-alpineからpostgres:12-alpineに変更する。

次に、dbを定義しているブロックの下に以下を追記。

dbv15:
    restart: always
    image: postgres:15-alpine
    networks:
      - internal_network
    env_file:
      - .config/docker.env
    volumes:
      - ./dbv15:/var/lib/postgresql/data

その後、ファイル先頭にある web の links に移動し、- db の次の行に - dbv15 を追加。(インデントを合わせること)

保存して終了。

その後 docker compose build で再構築。

Step2 Postgres 12からデータ吸い出し & 15 への流し込み

Postgres 15側に入る。
※この先一度抜けたら作業途中のデータやコマンド履歴が飛ぶので注意!(データベースは消えないので安全)
docker compose run --rm dbv15 bash

ダンプを実行する。
PGPASSWORD=$POSTGRES_PASSWORD pg_dump --no-owner -x -h db -d $POSTGRES_DB -U $POSTGRES_USER > dump.psql

15側に流し込む。
PGPASSWORD=$POSTGRES_PASSWORD psql -h dbv15 -U $POSTGRES_USER $POSTGRES_DB < dump.psql

注: $POSTGRES_DB、$POSTGRES_USER、$POSTGRES_PASSWORD はdocker.envで設定しているので、特別な理由がなければ変更不要。

これにて15への移行は完了。

DBサービスを止める。
docker compose stop

Step3 設定を元に戻す

docker-compose.yml を再度開き、先程定義した dbv15 のブロックを削除する。 また、dbのイメージをpostgres:12-alpineからpostgres:15-alpineに戻す。

その後、ファイル先頭にある web の links に移動し、- db の次の行に追加した - dbv15 を削除。

保存して編集を終了する。

その後、カレントディレクトリにある dbdbv12 にリネームし、それから dbv15db にリネームする。

mv db dbv12 && mv dbv15 db

これでPostgres 12で動いていたときのデータは dbv12 ディレクトリに移動し、Postgres 15に移行したデータは db に移動した。

Step4 再構築 & 起動

再び docker compose build で再構築する。

完了後、docker compose run --rm web pnpm run migrate でマイグレーションを行いつつDBが正常に利用できることを確認する。

最後に docker compose up -d で起動し、インスタンスにアクセスできれば成功。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment