PostgreSQL9.6からPostgreSQL10にバージョンアップ

PostgreSQL

PostgreSQL9.6からPostgreSQL10.8にバージョンアップする際、方法はいろいろあると思います。
今回は、pg_upgradeコマンドを使用してバージョンアップしてみました。

  • 旧バージョン停止
  • 新バージョンインストール
  • 新バージョン停止
  • 新バージョンのpg_upgrade
  • 新バージョン起動、確認

の手順で進めていきました。

手順

旧バージョン停止

Windowsのサービス管理からサービスを停止します。

新バージョンインストール

公式サイトから、最新版をダウンロードしましょう。(執筆時点では10.8)
ダウンロードしたファイルをダブルクリックし、進めていきます。

ポート番号は、「5433」と一時的にし、バージョンアップ後に「5432」へ戻すようにしました。

新バージョン停止

インストール後に自動的に起動されていますので、いったん停止します。
旧バージョンと同じように、サービス管理からサービスを停止します。

新バージョンのpg_upgrade

いよいよ、バージョンアップです。
事前準備として、pg_hba.confを編集し、データベースの認証を「trust」へ新旧ともに変更しましょう。
pg_upgradeの中で接続するために必要です。

  host    all    all    127.0.0.1/32      trust
host    all    all    192.168.1.1/32    trust

192.168.1.1の部分は、自分自身のIPを登録するようにしてください。 新旧ともに、編集してください。

準備が出来たら、「管理者権限」でコマンドプロンプトを起動し、下記のコマンドを実行します。 実行するカレントディレクトリは、ログが出力されるので、わかりやすい場所へ cd してください。

  cd c:\temp
pg_upgrade.exe -U postgres --old-datadir "C:/Program Files/PostgreSQL/9.6/data" --new-datadir "C:/Program Files/PostgreSQL/10/data" --old-bindir "C:/Program Files/PostgreSQL/9.6/bin" --new-bindir "C:/Program Files/PostgreSQL/10/bin"

invalid “unknown” user columns のエラーが表示されたとき

おそらく、create table as なんかで作ったテーブルで型指定が明示的にされていないカラムがあるのではないでしょうか?
pg_upgradeを実行したカレントディレクトリに、「tables_using_unknown.txt」のファイルが作成されているので、それを参考に該当のフィールドに型定義をするなり、テーブル削除するなりしてください。

connection to database failed: fe_sendauth: no password supplied のエラーが表示されたとき

おそらく、パスワード認証で失敗しています。pg_hba.conf を編集し、「trust」にしてください。

新バージョン起動、確認

必要に応じて、postgresql.confを編集し、Portを「5432」に戻します。
サービスを起動し、新PostgreSQLへ接続できることを確認してください。

pgAdminを使用する場合は、ポートを変更した場合は設定変更する必要があります。
pgAdminにログイン後、左のServers → (該当DB)右クリック → のPropertes → connection で、Portを変更してください。

コメント

タイトルとURLをコピーしました