Homebrewで入れたPostgreSQLがパスワード要求されて困った場合

macOSにPostgreSQLをインストールする方法は色々ありますが、Homebrew(パッケージ管理システム)を使うのが一番お手軽なのではないかと思います。この方法でPostgreSQLをインストールするとパスワード入力をスキップする設定がデフォルトとなります。

さてこの設定がどこに書かれているかというと、「brew install postgresql」コマンドを実行するとデフォルトクラスタのファイル一式が「/usr/local/var/postgres」に収められていますので、この中にあるpg_hba.confというファイル(アクセス管理するファイル)に記述があります。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust 
# 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.
#local   replication     user                                trust
#host    replication     user        127.0.0.1/32            trust
#host    replication     user        ::1/128                 trust

pg_hba.confに書いてあるtrustがパスワード要求されない設定になります。これがmd5やpasswordとなっているとパスワード要求されるので、trustに修正して「brew services restart postgres」でPostgreSQLを再起動するとパスワード入力をパスできるようになります。

それでもどうしてもパスワード要求されて困っているという方は、いっそのこと新たにクラスタを作成することをおすすめします。クラスタを作成する中でスーパーユーザーのパスワードを設定するようにしておけば、万が一パスワード要求されても指定したパスワードでなんとかなります。

新たにクラスタを作成し、スーパーユーザーにパスワードを設定しておく手順

  1. デフォルトクラスタのプロセスを停止してください。
    $ brew services stop postgres
  2. 新たに作るクラスタの配置場所を環境変数にセットしてください。
    $ export PGDATA=/usr/local/var/postgres_2
  3. クラスタを作成します。
    pg_ctlの「-o」オプションを付けると「’」か「”」で囲んだ部分を別途オプションとして渡せます。
    「-E」オプションでデータベースの文字コードをutf8に、「-U」オプションでスーパーユーザー名(postgres)を指定しています。「-U」オプションを省略するとOSのログインユーザー名がスーパーユーザー名になります。「-W」を付けるとことでスーパーユーザーのパスワード設定のプロンプトが表示されるようになります。

    $ pg_ctl initdb -o “-E utf8 -U postgres -W”
  4. 新たに作成したクラスタでPostgreSQLを起動する。
    $ pg_ctl -D /usr/local/var/postgres_2 -l logfile start

 

以上でPostgreSQLにスーパーユーザー(postgres)でパスワードなしに接続できるようになるはずです。もしパスワードを要求されても手順3で設定したパスワードで接続することもできます。

sponsor