1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

PostgreSQLのバージョンを、9.4から12あげた時のメモ

Posted at

はじめに

データを大量に作って、少し試したいことがあり、勉強も兼ねてストアドプロシージャを作ってみようと思ったのですが、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コマンド実行時に、ユーザー名とパスワードを入力しなくても済むようになるので、このままでもよい方は戻さなくても大丈夫です。

pg_hba.conf
# 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を戻して、終了です。

参考

1
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?