Help us understand the problem. What is going on with this article?

pg_upgrade を使ったDBクラスタ移行手順 on Windows

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の上の方に以下の行を入れる。

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

以上。

leon-joel
Windows, Linux, C++, C#, WPF Ruby, Rails, SQL(PostgreSQL, MySQL, SQLite)
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした