Skip to content

Instantly share code, notes, and snippets.

@tateisu
Last active May 28, 2020 05:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tateisu/026dfb95a029484aed07d149743a6a63 to your computer and use it in GitHub Desktop.
Save tateisu/026dfb95a029484aed07d149743a6a63 to your computer and use it in GitHub Desktop.
docker環境でのpostgreSQL 9.6 => 11 へのアップグレード
# docker環境でのpostgreSQL 9.6 => 11 へのアップグレード
# https://github.com/tianon/docker-postgres-upgrade を利用する
# リポジトリに (OLD)-to-(NEW) のフォルダがあるか事前に確認しておく
# (今回の場合は 9.6-to-11 )
#################################
# 作業フォルダの作成
mkdir postgres-upgrade-2 && cd postgres-upgrade-2
mkdir -p postgresql/9.6/data postgresql/11/data
sudo chown -R 70:70 postgresql
# バックアップからデータをコピー
sudo rsync -av /hdd2/backup-mastodon1/mastodon/postgres/* postgresql/9.6/data
# アップグレードの実行
docker run --rm -v $PWD/postgresql:/var/lib/postgresql tianon/postgres-upgrade:9.6-to-11 --link
#####################################################
# postgreSQL 11 のコンテナを作成して vacuum full verbose analyze する
mkdir postgres11 && cd postgres11
cat > docker-compose.yml
version: '3'
services:
postgres11:
restart: always
image: postgres:11.1-alpine
volumes:
- ../postgresql/11/data:/var/lib/postgresql/data
env_file: .env
^D
$ cat > .env
POSTGRES_PASSWORD=************* (以前のDBと同じパスワードを指定する)
^D
$ docker-compose up
(ログを見て正常起動されたか確認する)
^C
$ docker-compose up -d
(バックグラウンドで起動される)
# pg_upgradeはanalyzeしないので、手動で開始する
$ docker exec -it postgres11_postgres11_1 psql -U postgres postgres
vacuum full verbose analyze;
\q
# コンテナを止める
$ docker-compose down
#####################################################
後は「postgres11に移行済みのデータフォルダ」を本番環境にコピーして使う
くれぐれもバックアップをお忘れなく
@tateisu
Copy link
Author

tateisu commented Jan 23, 2019

そうそう、pg_upgradeは拡張モジュールのバイナリ互換性までは見てくれないので、素のpostgresを使ってる前提じゃないとダメです。
拡張モジュールを使ってる方はdumpしてrestoreする方法しかない。

@tateisu
Copy link
Author

tateisu commented Jan 23, 2019

この方法だとpostgresql.conf, pg_hba.conf, pg_ident.conf の内容は引き継がれません。この三つのファイルはdiffを取るなり、PgTuneで行った設定やPgHero用のpg_stat拡張を入れる設定を再度行う等の必要があります。

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