概要
PostgreSQLでデータ移行、またはバッグアップの方法としてpg_dumpallがよく使われるが、タイトルのverまたぎでデータ復元するとコケる。原因はパスワード暗号方式の更新のせい。対処としてパスワード保護を解除してデータ投入しパスワードを更新する方法を紹介する。
現状
環境
- Windows10 64bit 21H1
- PostgreSQL12.7と13.3
すると高確率で数行目にパスワードエラーが出力される
原因
PostgreSQL13からデフォルトのパスワードの暗号化方式(postgresql.confのpassword_encryption)がMD5からSHA-256になった。暗号化方式が違うので保存されているデータも復元できなくなり、パスワードが一致しなくなる。
解決法
案として
- 12側の暗号化方式をSHA-256にして、全ユーザーのパスワードを設定し直したあと再度pg_dumpallを取得し直して入れる
- 13側で一旦パスワード認証を無効にした状態でdumpデータを投入し、全ユーザーのパスワードを再設定したあとパスワード保護を有効にする
- 13の[pg_hba.conf]を開き、[127.0.0.1]、[::1]のMETHOD列を[scram-sha-256]から[trust]にする。リモートでpsql叩いてる場合はそのIPのMETHODをいじる。
- PostgreSQLを再起動する。サービス画面で出来る
- dumpデータをpsqlで投入する。パスワードエラーが出ないはず。出たら1.でtrustにするIP等が間違ってる
- 投入できたらpg_AdminやSQLクライアントでユーザー[postgres]にログインする。パスワードなしで入れるはず。
- データ上にある全てのユーザーのパスワードを再設定する。同じパスワードで良い。新し暗号化データで上書きしたいだけ。
- 1.で[trust]にしたMETHOD列をすべて[scram-sha-256]に戻す
- PostgreSQLを再起動する。
- PSQL等で全ユーザーにログインし、パスワードが通るか確認して完了
補足
13以降のpg_dumpallのデータを13以降に入れても暗号化方式が一致しているので、この記事の内容が原因でコケることはない。
13以降のデータを12以前に入れるとなったら12と13の作業内容を入れ替えて行う。
0 件のコメント :
コメントを投稿