psql: error: FATAL: database does not exist の解決方法

1分で読める テック
最終更新:

PostgreSQLの環境構築後に、ユーザーは存在しているのに接続できないエラーが出た記録です。

エラーの内容

docker compose exec db bash
root@1e04746ce311:/# psql -U username
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL: database "username" does not exist

ユーザー(ロール)は作成済みなのに、接続できない状態でした。

原因

psqlのオプションのデフォルト動作が原因です。

psql -h ホスト名 -p ポート番号 -U ロール名 -d データベース名
  • -d(データベース名)を省略した場合、ロール名と同じ名前のデータベースに接続しようとする

今回は -U username だけ指定したので、username という名前のデータベースを探しに行き、存在しないためエラーになっていました。

実際に作成していたデータベース名は app でした。

解決法

-d オプションでデータベース名を明示的に指定します。

psql -U username -d app
psql (16.x)
Type "help" for help.

app=#

まとめ

psql: FATAL: database "username" does not exist というエラーが出たら、-d オプションでデータベース名を指定しているか確認してください。ロール名とデータベース名が一致している場合はエラーが出ませんが、別の名前のデータベースに接続する場合は明示が必要です。

質問・リクエストを送る

記事についての質問や、取り上げてほしいテーマがあればお気軽にどうぞ。いただいた質問はブログ記事として回答し、Q&Aページで公開することがあります。