psqlコマンド実行時にFATAL: database "db_name" does not exist が出た時の対処

前回の記事でHomebrew経由でPostgreSQLmacにインストールしました。 Postgresqlインストール直後にpsql コマンドで以下のエラーが発生したので対処についてのメモです。

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

結論

psql コマンドを引数なしで実行するとユーザー名と同じ名前のデータベースに接続しようとします。 FATAL: database "karlley" does not exist と表示された原因はユーザ名と同じデータベースが存在しないのでエラーが発生したようです。 エラーの対処は次の2つです。

  • psql コマンドに引数で存在するデータベース名を指定する。
  • ユーザ名と同名のデータベースを作成する(psql コマンドに引数無しでユーザ名と同名のデータベースに接続する)。

ちなみに、引数無しでpsql コマンドを実行した際のデフォルトのデータベース、ユーザ名等は環境変数を設定することで指定可能です。

例) ユーザ名karlley でエラーが発生したのでユーザ名と同名のデータベースkarlley を作成する。

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

# ユーザ名と同名のデータベースを作成
$ createdb karlley

# ユーザ名と同名のデータベースに接続するのでエラーが発生しない
$ psql
psql (14.4)
Type "help" for help.

# データベースの作成を確認(一番上が作成したデータベース)
karlley=# \l
                           List of databases
   Name    |  Owner  | Encoding | Collate | Ctype |  Access privileges
-----------+---------+----------+---------+-------+---------------------
 karlley   | karlley | UTF8     | C       | C     |
 postgres  | karlley | UTF8     | C       | C     |
 template0 | karlley | UTF8     | C       | C     | =c/karlley         +
           |         |          |         |       | karlley=CTc/karlley
 template1 | karlley | UTF8     | C       | C     | =c/karlley         +
           |         |          |         |       | karlley=CTc/karlley
 testdb    | karlley | UTF8     | C       | C     |
(5 rows)

感想

存在しないDBに接続しようとしたという単純なことが原因でしたがデフォルトの仕様をちゃんと理解する大事さを学べて良かったです。 入力している文字列がデータベース名なのかユーザ名なのかちゃんと理解してコマンド入力していないのも問題でした。 次はDBを作成してデータの保存と取得をやってみよう。

参照

PostgreSQL: Documentation: 14: psql

PostgreSQLの環境構築ができないFATAL: database "t" does not exist