🦔

PostgreSQL 初期ロール名

2023/07/01に公開

PostgreSQL(14.8)をbrewでインストールした際に若干詰まったのでメモ。
もしかしたら常識なのかもしれないが知らなかった。他の方の助けになればと思い残します。

TL;DR

  • PostgreSQLインストール時に作成される初期ロール名は必ずしもpostgresではない
  • デフォルトではデータベースクラスタを初期化したOSユーザー名で作成される

詰まった問題

MacにPostgreSQLをインストール

brew install postgresql

デフォルトでpostgresというロールが作成されるはずだと思い、以下のコマンドでログインを試みる。

psql -U postgres

すると以下のエラー発生。

psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "postgres" does not exist

初期ロール名はpostgresなのでは???となり詰まったので調査した。

解決策

OSのユーザー名と一致するロールでpostgresデータベースへの接続はできる。

psql postgres

必要であればpostgresロールを作成すれば良い。

原因

公式ドキュメントに以下の記載の通り。

データベースシステム自身を起動するために、初期化されたばかりのシステムは常に定義済みのロールを1つ持ちます。 このロールは必ず「スーパーユーザ」であり、デフォルトでは(initdb実行時に変更しない限り)そのデータベースクラスタを初期化したオペレーティングシステムユーザと同じ名前となります。 習慣的にこのロールはpostgresと名付けられます。 ロールを追加する場合はまずこの初期ロールで接続しなければいけません。

常にpostgresという名前で初期ロールが作成されるわけではなく、データベースクラスタを初期化したOSのユーザー名が用いられるそうです。
詳細を確認していないですが挙動から推察するに、brewでinstallする場合、デフォルトではbrew installしたOSのユーザー名でデータベースクラスタが初期化される模様。

結論

PostgreSQLインストール時に作成される初期ロール名は必ずしもpostgresではないから気をつけましょう。

Discussion