pg_upgrade を使ったDBクラスタ移行手順 on Windows
まずはpg_upgradeのドキュメントに目を通す。
以下は、Windows8.1 上で、PostgreSQL9.4 から 9.5.4 に pg_upgrade した時の手順。
1.旧バージョンのpostgresサービスを停止
2. 新バージョンのバイナリーをインストール
※EnterpriseDBの x86-32版 を使用した。当然、旧バージョンのもx86-32版。
3. 新バージョンのpostgresサービスを停止
4. pg_hba.confの編集
新旧DBクラスタのpg_hba.conf
の上の方に以下の行を入れる。
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
5. pg_upgradeを実行
管理者としてコマンドプロンプトを起動し、Everyone書き込み可能なディレクトリに cd
する。
※ProgramFilesやWindows配下とかじゃなければ、ほぼどこでも大丈夫なはず。参考
※pg_upgradeはカレントディレクトリに大量の一時ファイルをはき出すので、空のディレクトリを新規作成した方が良いかも。
以下のコマンドを実行する。※パスは適宜変更のこと。
注: -UオプションでDBユーザーを明示すること。
補足: CPUコア数によっては --jobs
オプションを付けておくと時間短縮になる(とのこと)。
> "C:\Program Files (x86)\PostgreSQL\9.5\bin\pg_upgrade"
-U postgres
--old-bindir="C:\Program Files (x86)\PostgreSQL\9.4\bin"
--new-bindir="C:\Program Files (x86)\PostgreSQL\9.5\bin"
--old-datadir="F:\DB\Database\9.4\data"
--new-datadir="F:\DB\Database\9.5\data"
Windowsファイアウォールの警告が表示されたら、もちろん【許可する】。
補足: postgresユーザーとしてシェルを起動?
ドキュメントに以下のように書いてあるが、EnterpriseDB版インストーラーでインストールした場合にはpostgresアカウントというものは作られないため、以下は実行不可能。
※その代わりに上の手順では -U オプションでpostgresユーザーを明示的に指定している。
Windowsユーザの場合、管理者アカウントでログオンしなければなりません。また、 postgresユーザとしてシェルを起動し、適切なパスを設定してください。
RUNAS /USER:postgres "CMD.EXE" SET PATH=%PATH%;C:\Program Files\PostgreSQL\9.0\bin;
- 昔のPostgreSQLはインストール時にpostgresアカウントが自動作成されていたが、最近のは作られなくなっていて、postgresサービスは
Network Service
アカウントで動作するようになっている。
6. 確認&後片付け
upgrateに成功したら、以下のように表示される。
Upgrade Complete
----------------
Optimizer statistics are not transferred by pg_upgrade so,
once you start the new server, consider running:
analyze_new_cluster.bat
Running this script will delete the old cluster's data files:
delete_old_cluster.bat
pg_hba.conf を元に戻す。
新DBサービスを起動し接続。正しくデータが移行されていることを確認。
postgresql.conf(など)の設定も移行。
※廃止されている設定項目があったりすると起動しないこともあるので、設定移行後はサービス再起動&ログファイル確認を。
DBのログファイルのrotation設定も忘れずに変更。
統計データは移行されていないようなので、pg_upgradeが作ってくれた一括analyze用バッチファイルを起動。※当然、それなりに時間がかかる…
> analyze_new_cluster.bat
不要であれば、旧DBクラスタを削除。削除用のbatファイルが作成されているのでそれを使うと簡単。(使ったことないけど…)
> delete_old_cluster.bat
不要であれば、カレントディレクトリにはき出されたログファイル・バッチファイルを削除。
--
pg_dumpall を使用したDBクラスタ移行手順メモ on Windows
公式ドキュメント: PostgreSQLクラスタのアップグレード処理
移行元
> pg_dumpall.exe -U postgres > dump.sql
※-U でユーザー名を明示しないと動かない。-Uなしの場合「バ」だけ出力して止まる@pg9.5
移行先
> psql -U postgres -d postgres -f dump.sql
以上。