WSL2 で PostgreSQL をインストールして触る

WSL2 Ubuntu 環境に PostgreSQL v12 をインストールしてみた。

$ sudo apt update
$ sudo apt upgrade -y
$ sudo apt dist-upgrade -y
$ sudo apt auto-remove -y

# PostgreSQL をインストールする
$ sudo apt install postgresql
$ psql --version
psql (PostgreSQL) 12.14 (Ubuntu 12.14-0ubuntu0.20.04.1)

# ログインを試みるがエラーになる
$ psql -U postgres -d postgres
psql: FATAL:  Peer authentication failed for user "postgres"

デフォルトでは、Linux 上で postgres ユーザに切り替えないとアクセスできないみたい。コレを HBA (Host Base Authentication) 機能の Peer 認証というらしい。

以下の設定ファイルを開き、3箇所出てくる peer 部分を trust に変えた。

$ sudo vi /etc/postgresql/12/main/pg_hba.conf

# サービスを再起動する
$ sudo /etc/init.d/postgresql restart

# アクセスできるようになる
$ psql -U postgres -d postgres
psql (12.14 (Ubuntu 12.14-0ubuntu0.20.04.1))
Type "help" for help.

postgres=#

ホスト未指定だとパスワードも求められずにアクセスできたが、-h オプションで localhost を指定すると、パスワードを入力しろと言われてしまう。そこで、予めパスワードを設定しておく。

postgres=# ALTER USER postgres PASSWORD 'my-password';
ALTER ROLE

postgres=# \q
$ psql -h localhost -p 5432 -U postgres -d postgres
Password for user postgres:  # パスワード入力する
psql (12.14 (Ubuntu 12.14-0ubuntu0.20.04.1))
SSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)
Type "help" for help.

postgres=#

このとおり、-h localhost を書いてもアクセスできるようになった。