🦔
PostgreSQL 初期ロール名
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