2018-05-24

PostgreSQL 10 インストール時の不具合解消方法

Windows Server に PostgreSQL 10 インストール時に 「Error with Configuration or permission 」という警告が出る場合の対処方法


 Windows Server 2012 環境に最新版の PostgreSQL 10 (10.4) をインストールしてみたのですが、途中で以下の警告メッセージが表示されてしまいました。

PostgreSQL 10 インストール時に発生した警告メッセージ

 警告ダイアログには、「ログを見ろ」とあったので確認してみたところ、権限設定で失敗していた模様です(文末参照)。

 そこで、以下の方法で不具合の対応をしてみました。
  同様の不具合でお悩みの方はダメ元で試してみるとよいかもしれません。

 ※インストール失敗理由については文末の「不具合の原因」のセクションをご覧ください。

PostgreSQL 10 インストール失敗の対応方法

  1. 上記の警告メッセージが発生してもいったんは最後までインストールする
    内部的にはインストールはエラーとなるため、 このままでは PostgreSQL サーバの起動はできません。
  2.  コントロールパネルの「プログラムのアンインストールまたは変更」から PostgreSQL をアンインストールする
  3. アンインストール後に残ったインストールフォルダより、\data\pg10 までたどり、pg10 フォルダのセキュリティより、Users グループに「変更」権限を付与する
    PostgreSQL 10 の \data\pg10 フォルダの Users アクセス許可に「変更」権限を付与
  4. もう一度、Postgres 10 をインストールして成功すれば終了

不具合の原因


 結論から述べると、PostgreSQL 10 を Windows にインストールした際に、以下のメッセージが出た場合は、権限設定エラーが発生した可能性が高いということになりました。

「Problem running post-install step. Installation may not complete correctly
 Error with configuration or permissions. Please see log file for more information.」

 以下が、不具合の調査結果になります。

1. インストールログファイルの特定
 PostgreSQL 10 のインストールログは、PostgreSQL 10 インストールディレクトリ直下の logs フォルダにあります。この中の PostgreSQL-installLog.log を確認します。

2. PostgreSQL-installLog.log の中から "Error with configuration or permissions" という文字列を検索してみます。

  エラー文字列の付近を調べてみると、どうやらデータベース初期化時にエラーを起こしていたらしいことがわかります。

Initializing Postgres DB with:
  E:\PostgreSQL\pg10\bin\initdb -U postgres -A md5 --encoding UTF8  -D "E:\PostgreSQL\data\pg10" --pwfile="E:\PostgreSQL\pg10\.pgpass" > "E:\PostgreSQL\data\logs\pg10\install.log" 2>&1 ERROR: Unable to Initialize PG. see logfile: E:\PostgreSQL\data\logs\pg10\install.log

Error running init-pg10
Script stderr:
 Program ended with an error exit code

Error with configuration or permissions. Please see log file for more information.
Problem running post-install step. Installation may not complete correctly
 Error with configuration or permissions. Please see log file for more information.

 3. エラーが発生したコマンドをコマンドプロンプトから走らせてみる

  ログテキスト(赤色)より、ログファイルへのリダイレクト部分を取り除いたコマンド文字列を走らせてみました。

E:\PostgreSQL\pg10\bin\initdb -U postgres -A md5 --encoding UTF8  -D "E:\PostgreSQL\data\pg10" --pwfile="E:\PostgreSQL\pg10\.pgpass"

 すると、以下のように \data\pg10 のディレクトリの権限を変更しようとして Permission denied が返されたことがわかりました。

PostgreSQL コマンドによるデータベース初期化時に Permission denied が返る
4. Users グループに「変更」権限を与えてみる
 権限エラーということで、pg10 フォルダの Users グループに「変更」権限を追加します。
 上記のコマンドプロンプトのスクリーンショットの解説では、以下の記述があります。

データベースシステム内のファイルの所有者は"Administrator"となります。このユーザがサーバプロセスも所有する必要があります。

 インストール実行時の Windows ユーザは Administrator でしたので、権限の書き換えは問題なくできると思われたのですが、実際はそのようにならなかったため、Administrator がデフォルトで所属している Users グループを採用しました。
 恐らく、他ユーザでインストール中にもこの方法で対応できると思います。

PostgreSQL 10 の \data\pg10 フォルダの Users アクセス許可に「変更」権限を付与
5. 先ほど失敗したコマンドをもう一度走らせてみる
 3. のコマンドをもう一度走らせます。
 ご覧のとおり、エラーが解消されましたね。
PostgreSQL コマンドによるデータベース初期化成功


 よって、今回の不具合の原因は data\pg10 フォルダの権限不足によるものでした。


※ Everyone を追加してから、フルコントロール権限を割り当てても同様に動作しますが(実験済み)、Everyone を重要なフォルダに割り当てたり、高度な権限を与えたりすることはサーバのセキュリティリスクを高めることになりますのでお勧めはしません。


参考リンク:
Re: BUG #14541: Getting error while installation

(亀)