はじめに
データを大量に作って、少し試したいことがあり、勉強も兼ねてストアドプロシージャを作ってみようと思ったのですが、postgresqlは11以降でしか使えないらしい。。。
ということで、いっそのこと12まであげてしまおうと思いました。
バージョンアップ手順
ここを参考にさせていただきました。
https://tech-blog.rakus.co.jp/entry/20190829/postgresql
pg_upgradeというコマンドを実行して、旧→新に移行します。
※当方、Windows10環境です。
1.目当てのバージョンをダウンロードしてくる。
ここでインストールできます。
2.ダウンロードしてきたexeファイル実行し、インストールする。
※ここでロケールの指定を、旧環境と合わせておいた方がよいので、確認しておきましょう。
また、dataフォルダは、後々いじることになるので、システムファイル配下よりも、別のところにフォルダを作ってあげた方が好ましいようです。
(私は何も考えず、そのままシステムファイル配下にインストールしてしまいましたが。。。)
3.コマンド実行前の準備
(1)initdbを実行する。
新しくインストールしたバージョンの方でコマンドを実行します。
"C:\Program Files\PostgreSQL\12\bin\initdb.exe" -D "C:\Program Files\PostgreSQL\12\data"
※ここで注意しておきたいことは、旧でinitdbしたオプションと、新でinitdbしたオプションが一致していなければなりません。ロケールの設定や照合順序等が、旧と新で一致していないと、移行ができなくなってしまいました。(経験済み)
旧の方で特になにもいじっていなければ、ここはスキップしてもよいかもしれません。
(2)パスワード設定ファイルを設定する。
Windowsユーザーであれば、%APPDATA%\postgresql\
フォルダのpgpass.conf
ファイルを変更します。
記載方法:hostname:port:database:username:password
例:localhost:5432:postgres:postgres:password
(3)認証方式を一時的に変更する。
こちらは、旧と新どちらにも変更が必要になります。
pg_hba.confというファイルを書き換えます。
右側のMETHOD
という列にあるmd5
という文字列を、全てtrust
に書き換えます。
一時的にと書いていますが、これでpsqlコマンド実行時に、ユーザー名とパスワードを入力しなくても済むようになるので、このままでもよい方は戻さなくても大丈夫です。
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host replication postgres 127.0.0.1/32 trust
#host replication postgres ::1/128 trust
(4) コマンドを実行する、前準備
フォルダを確認する。
コマンド実行時に指定するオプションとして、下記があります。
使用するフォルダが存在しているか、念の為確認しておきます。
オプション | 意味 |
---|---|
-d | 旧PostgreSQLのdataフォルダ |
-D | 新PostgreSQLのdataフォルダ |
-b | 旧PostgreSQLのbinフォルダ |
-B | 新PostgreSQLのbinフォルダ |
-p | 旧のポート番号 |
-P | 新のポート番号 |
-U | ユーザー名 |
他にも色々あるのですが、私の場合は、上記を指定しました。
本来は、-p. -Pはなくてもいけるらしいのですが、最初に実行した際に、サーバの起動で50432というポートを見に行っていたので、こちらもオプションで指定しました。
フォルダを移動する。
pg_upgradeを実行する際、pg_upgrade_internal.log
というログファイルが出力されるのですが、それは作業ディレクトリに出力されるため、postgresユーザーでもログが出力できる場所に移動しておいてあげましょう。
サーバーを停止する。
旧・新どちらのPostgreSQLサーバーも停止状態にしておきます。
(5)いざ、実行
下記の場合は全てフルパスで指定していますが、binフォルダまでを環境変数にいれてあげて実行しても大丈夫です。
pg_upgrade.exeは、最新のバージョンの方で実行するようにします。
"C:\Program Files\PostgreSQL\12\bin\pg_upgrade.exe" -b "C:\Program Files\PostgreSQL\9.4\bin" -B "C:\Program Files\PostgreSQL\12\bin" -d "C:\Program Files\PostgreSQL\9.4\data" -D "C:\Program Files\PostgreSQL\12\data" -p 5432 -P 5432 -U postgres
アップグレードが完了しました。とでたら、終了です。
メッセージにも出てきますが、統計情報は移行されないみたいなので、メッセージに従ってバッチを実行する必要があるみたいです。今回は実行しませんでした。
pg_hba.confを戻して、終了です。