RailsとPostgreSQL:ロールpostgresは存在しません


106

Mac OS LionにPostgreSQLをインストールし、railsアプリで作業しています。RVMを使用して、他のRailsアプリからすべてを分離しています。

何らかの理由で、初めてdbを移行しようとしたときに、rakeがpostgresユーザーを見つけられません。エラーが出る

 FATAL:  role "postgres" does not exist

私はpgAdminを持っているので、DBにpostgresユーザーがいることをはっきりと確認できます-実際には管理者アカウントです-他に何をすべきかわかりません。

PostgreSQLがインストールされているパスが原因でPostgreSQLに問題がある人についてどこかで読んだことがありますが、dbが見つからなかったとしたら、そこまで到達できなかったでしょう。


DBユーザー(=役割)は密接に関連する問題についてはpostgres、同じエラーメッセージにつながることができます作成されていない、この関連の質問を参照してください。stackoverflow.com/questions/11919391/...
アーウィンBrandstetter

回答:


12

このメッセージは、データベースユーザーが存在しない場合にポップアップ表示されます。ここでマニュアルを比較してください
複数のローカルデータベース 原因ではありません。ロールはクラスター全体で有効です。マニュアル再び

ロールはデータベースクラスターレベルで定義されるため、クラスター内のすべてのデータベースで有効です。

あなたは別のデータベースクラスターになってしまう必要があります。それは、同じマシン上で実行され、別のポートをリッスンする別のサーバーです。または、おそらく、別のマシンで。

メッセージが実際にはリモートサーバーから送信されているのでしょうか。


それだけでした-私はpostgresqlを正常に動作させるのに苦労していたので、新規インストールを実行したので、ここにいくつかのインスタンスが必要です。ただし、database.ymlファイルのポートを変更すると、すべて正常に動作しました。ご協力いただきありがとうございます!
Adam

すべての画像をクリーンアップした後でも機能しませんでした- docker rmi $(docker images -q) --force。しかし、問題はvolumes私が推測したことでした
prayagupd

267

実際、不明な理由により、問題はpostgresqlロールが作成されていないことが原因であることがわかりました。

実行してみてください:

createuser -s -r postgres

ロールは、PostgreSQLがデータベース権限を維持する方法であることに注意してください。postgresユーザーのロールがない場合、何にもアクセスできません。createuserコマンドは、CREATE USER、CREATE ROLEなどのコマンドの薄いラッパーです


8
sudo su - postgresこのコマンドが機能する前に使用する必要がありました。ありがとう!
Connor Leech 2013年

2
セットアップがどのように行われたのかわからないが、postgresユーザーとロールを持たないpostgresqlを作成し、myUserを唯一のユーザーとして使用したが、myUserという名前のデータベースが存在しないという口実で許可することを拒否した!騒乱のこの解明された部分!
ジェローム

@StuartNelson:これは一般的な問題の解決策のようです(ここでも同じです)。しかし、それは明らかにこの質問に対する答えではありません。OPは、その役割が彼のDBに存在したことを明確に述べています。
Erwin Brandstetter 2014

役割をユーザーと統合する場合を除きます。ユーザーは存在しましたが、役割は存在しませんでした-彼は役割ではなくユーザーが存在することを明確に述べています
Chris Sherlock

-rオプションが持つ必要はありません-sオプション。スーパーユーザーには「ロールの作成」属性が含まれます。
Dennis

26

最近、postgresをインストールした直後にこの問題が発生しました。インストール直後の場合は、デフォルトのユーザーであるpostgresがない可能性があります。その場合、以下のコマンドを使用してデフォルトのユーザーpostgresを作成できます。

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

必要なデータベースロール名とパスワードの入力を求められます。プロセスが完了すると、以下のコマンドを使用してpostgresコンソールにログインできます。

psql -U 'your_database_name'

例:psql -U postgres
ここで、ユーザーの作成中にパスワードを入力した場合は、パスワードを入力する必要があります。

それが役に立てば幸い :)


22

私はOSX 10.8を使用していましたFATAL: role "USER" does not exist。多くの人がここで言ったように、実行しcreateuser -s USERますが、同じエラーが発生しました。これは最終的に私のために働きました:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

createuser -s --username=postgresPostgresの(--username = Postgresのフラグ)として接続することによって、スーパーユーザー(-sフラグ)を作成します。

あなたの質問に回答したようですが、OSXを使用してPostgreSQL 9.2.4をインストールしようとしている人のためにこの回答を追加したいと思います。


2
最初の2行をに短縮できsudo su postgresます。
6ft Dan、2014

これも私にとってubuntuでの解決策でした。上と同じユーザー名を使用するようにdatabase.ymlを更新することを忘れないでください
crobicha

10

この問題は、HerokuのPOSTGRES.appを初めてインストールしたときに発生しました。ある朝の試行錯誤の後、この1行のコードで問題が解決したと思います。前に説明したように、これはpostgresqlが最初に設定されたときにデフォルトの役割を持っていないためです。そして、それを設定する必要があります。

sovanlandy=# CREATE ROLE postgres LOGIN;

このpsqlコマンドを使用するには、それぞれのpsqlコンソールにログインする必要があります。

また、ロール「postgre」をすでに作成しているにもかかわらず権限エラーが発生する場合は、次のコマンドで変更する必要があることにも注意してください。

sovanlandy=# ALTER ROLE postgres LOGIN;

それが役に立てば幸い!


4

Herokuのドキュメント。彼らは言う聖霊降臨祭のレール4を始めます:

database.ymlにユーザー名フィールドがある場合は、それも削除する必要があります:config / database.ymlファイルで:remove:username:myapp

次に、「development:」のその行を削除するだけです。pgがデータベースに「myapp」の役割で機能することを伝えない場合は、

この行は、データベースmyapp_developmentをmyappのロールの下で実行する必要があることをrailsに示しています。データベースにこの役割がない可能性があるため、削除します。行を削除すると、Railsは現在コンピューターにログインしているユーザーとしてデータベースにアクセスしようとします。

また、開発用のデータベースを作成することも忘れないでください。

$createdb myapp_development

アプリ名の「myapp」を補充する


2

複数のローカルデータベースがありますか?をチェックしてdatabase.yml、必要なpg dbにアクセスしていることを確認してください。rails console確認に使用します。


2

インストール手順によりpostgres、デフォルトのPostgresロールに関連付けられたというユーザーアカウントが作成されます。Postgresを使用するために、そのアカウントにログインできます。ただし、明示的に指定されていない場合、railsアプリは別の役割、特に、postgresの役割では作成されない可能性のあるUNIXユーザー名を持つ役割を探します。

それを克服するために、最初にインストール中に作成されたデフォルトの役割postgresに切り替えることにより、新しい役割を作成できます。

sudo -i -u postgres

postgresアカウントにログインしたら、次のコマンドで新しいユーザーを作成できます。

createuser --interactive

これにより、いくつかの選択肢が表示され、応答に基づいて正しいPostgresコマンドを実行してユーザーを作成します。

ロール名といくつかの権限を渡し、ロールが作成されたら、dbを移行できます


1

私の答えははるかに簡単でした。ちょうどdbフォルダーに行き、私が強制的に作成しようとしたが実際には自動的に作成されたid列を削除しました。また、(configフォルダーの下にある)database.ymlファイルのUSERNAMEも削除しました。


1

Ubuntuのローカルユーザーコマンドプロンプトで、rootユーザーではなく、次のように入力します。

sudo -u postgres createuserユーザー名

上記のユーザー名は、メッセージ「FATAL:role 'username' does not exist。」に示されている名前と一致する必要があります。

ユーザー名のパスワードを入力してください。

次に、役割が存在しないというメッセージを生成したコマンドを再入力します。


0

AWSでのAWS EC2へのデプロイに関するRyan Bateのチュートリアルをゴムで試そうとした後、私はここにたどり着きました。これが私に起こったことです:「

rails new blog -d postgresql

当然、これはデータベースとしてpgを使用して新しいアプリを作成しますが、データベースはまだ作成されていません。sqliteではrake db:migrateを実行するだけですが、pgでは最初にpgデータベースを作成する必要があります。ライアンはこのステップを実行しませんでした。コマンドはでありrake db:create:all、実行できますrake db:migrate

2番目の部分は、database.ymlファイルの変更です。ファイルが生成されるときのユーザー名のデフォルトは「appname」です。ただし、postgresqlの管理者としてのあなたの役割は異なる可能性があります(少なくとも私にとっては)。私はそれを自分の名前に変更し(ロール名の作成に関する上記のアドバイスを参照)、行ってよかったです。

お役に立てれば。


0

Postgresのインストールとアンインストールを繰り返した後、Os X Mavericks、Rails 4、Ruby 2で一貫して動作するようになりました。

  1. database.ymlファイルで、デフォルトのユーザー名を自分のコンピューターのユーザー名に変更します。私にとっては「admin」です。

  2. コマンドラインでrake db:create:allを実行します

  3. 次に、rake db:migrateを実行します

  4. Railsサーバーを実行してローカルホストを確認すると、「ようこそ」と表示されます。


0

initdb -U postgres -D /path/to/data現在のユーザーがデフォルトであるため、ユーザーpostgresとして実行または実行することで、これを回避できる場合があります。GL!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.