web-dev-qa-db-ja.com

RailsおよびPostgreSQL:ロールpostgresは存在しません

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

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

 FATAL:  role "postgres" does not exist

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

PostgreSQLのインストール先のパスが原因でPostgreSQLに問題がある人についてどこかで読んでいますが、dbが見つからなければそこまで到達できなかったと思います。

103
Adam

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

ロールはデータベースクラスタレベルで定義されるため、クラスタ内のすべてのデータベースで有効であることに注意してください。

別のdatabase-clusterで終わる必要があります。これは、同じマシン上で別のポートをリッスンする別のサーバーになります。または、おそらく別のマシン上で。

実際には、メッセージはリモートサーバーから送られてくるのでしょうか?

12

実際、何らかの理由で、postgresqlロールが作成されていなかったために問題が発生したことがわかりました。

実行してみてください:

createuser -s -r postgres

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

252
Chris Sherlock

最近、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
ここで、ユーザーの作成中にパスワードを入力した場合は、パスワードを入力する必要があります。

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

26
Prem

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

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

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

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

22
Jack

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

sovanlandy=# CREATE ROLE postgres LOGIN;

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

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

sovanlandy=# ALTER ROLE postgres LOGIN;

それが役に立てば幸い!

10
sovanlandy

Herokuのドキュメント。はじめにRails 4、彼らは言う:

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

次に、ロール「myapp」の下で機能するデータベースにpgが伝えない場合、「development:」の行を削除します。

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

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

$createdb myapp_development

アプリ名に「myapp」を追加

4
Yunrock

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

2
Jonathan Julian

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

Sudo -u postgres createuserユーザー名

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

ユーザー名のパスワードを入力します。

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

1
Robert Cambil

私の答えはもっと簡単でした。 dbフォルダーに移動して、id列を削除しました。これは、強制的に作成しようとしましたが、実際には自動的に作成されます。 database.ymlファイル(configフォルダーの下)のUSERNAMEも削除しました。

1
maudulus

この問題を回避するには、initdb -U postgres -D /path/to/dataを実行するか、ユーザーpostgresとして実行します。デフォルトは現在のユーザーです。 GL!

0
rogerdpack

ラバーを使用して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 adminの役割が異なる可能性があります(少なくとも私にとっては)。私はそれを自分の名前に変更し(上記のロール名の作成に関するアドバイスを参照)、行って良かったです。

お役に立てれば。

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