Railsで rails db:create を実行した瞬間、
password authentication failed for user
というエラーに直面した経験はないでしょうか。
このエラーは一見すると「パスワードが違う」だけに見えますが、実際にはそれほど単純な問題ではありません。
多くの場合、このエラーの正体はSQLで何が起きているのかを理解しないまま、Railsだけを操作していることにあります。
Railsは便利なフレームワークですが、データベース操作を完全に肩代わりしてくれる魔法ではありません。
裏側では必ずPostgreSQLとSQLによるやりとりが発生しています。
本記事では、SQLの知識がほぼない状態でRailsとPostgreSQLを使おうとした際に、
なぜ接続エラーが発生するのかを、実際の操作ログと失敗例をもとに整理します。
OSやWSLの話題には踏み込まず、あくまで「SQLとは何をしているのか」「Railsは何を要求しているのか」に焦点を当てて解説します。
SQLは「データベースを操作するための言語」です
Railsは非常に高機能ですが、rails db:create や rails db:migrate といったコマンドの裏側では、
PostgreSQLに対して複数の確認と命令が行われています。
具体的には、
「このユーザーは存在するか」
「データベースを作成する権限を持っているか」
「どの認証方式で接続するか」
といった内容を、すべてSQLを通じて問い合わせています。
SQLを知らない状態とは、例えるなら自動販売機の内部構造を知らずに、ボタンだけを押している状態です。
動けば問題ありませんが、エラーが出た瞬間に原因が分からなくなります。
psqlとは何か
psql は、PostgreSQLを直接操作するための対話型クライアントです。
Railsが内部で行っている処理と、ほぼ同じ操作を人間が直接行えます。
SELECT version();このSQLは「今接続しているPostgreSQLのバージョンを教えてください」という意味です。
これが実行できるということは、データベースと正常に会話できている状態を意味します。
SQLは「命令文」です
最低限、以下のSQLだけ理解していれば、Railsの初期エラーの多くは切り分けられます。
CREATE ROLE ユーザー名;
CREATE DATABASE データベース名;
ALTER ROLE ユーザー名;RailsのDB接続エラーの大半は、この3つのどこかで失敗しています。
「password authentication failed」が本当に意味していること
このエラーは、単純に「パスワードが間違っている」という意味ではありません。
正確には、「そのユーザーとして接続してよいか判断できなかった」という状態です。
ユーザーは本当に存在していますか
PostgreSQLでは、次のコマンドでユーザー一覧を確認できます。
\duここに rails_user が表示されていなければ、Railsは絶対に接続できません。
パスワードは何度でも再設定できます
パスワードが怪しいと感じたら、次のSQLを実行してください。
ALTER ROLE rails_user WITH PASSWORD 'password';この操作は何度実行しても壊れません。
Railsの接続エラーが出た場合、最初に確認すべきポイントです。
RailsはSQLをどのように使っているのか
Railsはデータベースを作成するとき、内部的には次のような要求をPostgreSQLに送っています。
「このユーザーでログインして、新しいデータベースを作ってよいですか?」
rails db:create の正体
擬似的にSQLで表すと、以下のような流れです。
CONNECT rails_user;
CREATE DATABASE moltbook_agent_260208_development;このとき、rails_user に CREATEDB 権限がなければ失敗します。
データベース名はRailsが決めています
Railsでは、データベース名は基本的にアプリケーション名から自動的に決まります。
- moltbook_agent_260208_development
- moltbook_agent_260208_test
別の名前でデータベースを作成しても、Railsはそれを見に行きません。
ここで名前が食い違うと、接続エラーが発生します。
SQLを怖がらずに触るための最低限ルール
SQLはすべてを覚える必要はありません。
しかし、RailsとPostgreSQLを使う以上、避けて通れない最低限の操作は存在します。
今は触っても安全なSQLだけ覚えます
初心者のうちは、以下のSQLだけで十分です。
- SELECT
- CREATE ROLE
- ALTER ROLE
- CREATE DATABASE
DROP や DELETE といった削除系コマンドは、まだ触る必要はありません。
エラーが出たらRailsより先にpsqlを確認します
順序が重要です。
❌ Rails → SQL
⭕ SQL → Rails
先にpsqlで状況を確認してからRailsを実行することで、原因が明確になります。
※本記事は、SQLの知識がほぼない状態でRailsとPostgreSQLを使おうとして発生した、
実際のエラーと操作ログをもとに構成しています。
〆最後に〆
以上、間違い・ご意見は
以下アドレスまでお願いします。
全て返信できていませんが 見ています。
適時、改定をします。
nowkouji226@gmail.com

