PostgreSQLのDB不存在エラー対処法

冒頭まとめ PostgreSQLへ接続するとき、次のエラーが出ることがあります。 FATAL: database "myapp" does not exist 通常は、接続しようとしたサーバーにmyappという名前のデータベースが見つかっていません。まず接続先と名前を確認します。別のサーバーへ接続している場合や、名前を省略したために意図しない名前が使われた場合もあります。 既存のデータを使うつもりなら、すぐに同名の空のデータベースを作らないでください。正しい接続先を確認し、新規作成が必要な場合だけ作成します。 エラーが示すのは接続先のデータベース名 PostgreSQLの接続初期化処理には、指定したデータベースが見つからないと接続を終了する処理があります。SQLSTATEという5文字のエラー識別子は3D000です。公式のエラーコード表ではinvalid_catalog_nameに対応します。 myappは接続時に使われた名前です。エラーに書かれた名前が、設定したつもりの名前と一致するか確認してください。psqlやアプリが付ける前置き、接続先の表示はクライアントによって異なります。 このメッセージは、少なくともPostgreSQLサーバーから応答を受けたことを示します。ただし、そのサーバーが意図した接続先だとは限りません。 同じ文言にDETAILが付き、接続中の削除・名前変更や、保存先ディレクトリの欠落が示される場合もあります。その場合は単なる作り忘れと決めつけず、詳細とサーバーログを確認します。 接続先を変えずに既存DBを一覧で確認する アプリが接続するホスト、ポート、ユーザー名を確認し、同じサーバーの既存データベースへ接続します。次はローカルの5432番ポート、管理用ロールpostgresを使う例です。 psql -h localhost -p 5432 -U postgres -d postgres -l 値は実際の構成に置き換えます。管理用ロールがpostgresとは限らず、postgresデータベースも削除されていれば使えません。その場合は、利用可能なロールと既存データベースを管理者に確認してください。 psql公式文書によると、-lは一覧を表示して終了します。ここでは接続先データベースも-d postgresで明示しています。 接続後なら、一覧と現在の接続情報を次で確認できます。 \l \conninfo 一覧に目的の名前があれば、アプリ側の接続先や名前の食い違いを調べます。別のポートで動くローカルPostgreSQL、別のDockerコンテナ、開発用と本番用などを取り違えていないかも確認してください。 パスワードを含む接続URLを、調査のためにそのまま公開しないようにします。 名前を省略するとユーザー名が使われる libpqの接続パラメータの公式説明では、dbnameの既定は接続ユーザー名と同じです。psqlでも、ほかに指定がなければこの動作を使います。 たとえば次のコマンドでは、環境変数などに別の指定がなければ、appuserというデータベースへ接続しようとします。 psql -h localhost -p 5432 -U appuser ロールappuserを作ることと、同名のデータベースを作ることは別です。既存のmyappを使いたいなら、名前を明示します。 psql -h localhost -p 5432 -U appuser -d myapp PGDATABASEなどの環境変数、接続サービスの設定、アプリの接続URLに名前が指定されている場合もあります。省略したから必ずOSのユーザー名になる、と一律には判断しません。 大文字・小文字にも注意します。SQLの識別子の公式規則では、二重引用符で囲まない名前は小文字へ変換されます。SQLでCREATE DATABASE MyApp;と書けばmyapp、CREATE DATABASE "MyApp";なら大文字を含むMyAppです。 接続パラメータの名前はSQLの識別子とは扱いが異なります。シェルで引用符を付けるだけで小文字へ変換されるわけではありません。一覧にある実際の名前と接続設定を合わせてください。 新規DBが必要な場合だけ作成する 新しいアプリ用のデータベースをまだ作っていない場合は、既存のデータベースへ接続し、作成します。 psql -h localhost -p 5432 -U postgres -d postgres psqlの中で、次を実行します。 ...

2026年10月17日 · ErrorLog