web-dev-qa-db-ja.com

PostgreSQLを使用する場合、ロールが存在せず、データベースを作成できません

アプリケーションにHerokuを使用していますが、PostgreSQLが必要ですが、開発にはSQLite3を使用できます。 Herokuは2つの異なるデータベースを持つことを強く推奨していたため、開発のためにPostgreSQLに変更することにしました。 gem pgをインストールした後、公式のPostgreSQLサイトにアクセスしてWindowsインストーラーを取得し、database.ymlも変更しました。インストール時にPostgreSQLのパスワードが必要なので、作成しました。 pg_hba.confファイルをmd5からtrustに変更して、データベースを作成しようとしたときにfe_sendauth: no password suppliedを通過する必要がありました。

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
Host    all             all             127.0.0.1/32            trust # was md5
# IPv6 local connections:
Host    all             all             ::1/128                 trust # was md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#Host    replication     postgres        127.0.0.1/32            trust
#Host    replication     postgres        ::1/128                 trust

しかし、それを取り除いた後、私は今これを取得します:

$ rake db:create
(in C:/app)
FATAL:  role "User" does not exist 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8", 
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil} 

development.sqlite3text.sqlite3がまだ存在しますが、それが問題になる可能性がありますか?何をする必要がありますか?

ここに私の完全な要点があります: https://Gist.github.com/1522188

59
LearningRoR

ユーザー名をdatabase.ymlに追加します。アプリケーションの名前(または名前の変形)をユーザー名として使用することもできます。プレースホルダーとしてapp_nameを使用します。

development:
  adapter: postgresql
  encoding: utf8
  database: app_development
  pool: 5
  username: app_name
  password:

次に、psql.exeを使用してPostgreSQL内にユーザー(別名「ロール」)を作成します。

$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q

最初の行はターミナルにあり、次の2行はpsqlの中にあります。次に、rake db:createを実行します。

Userユーザーはデフォルトかもしれませんが、PostgreSQLの他の目的では userはすでに使用されています です。ユーザー名としてUserを使用します。

postgres=# create role "User" login createdb;

とにかく、アプリケーションごとに1人のユーザーを作成する方が良いでしょう。

database.ymltestエントリにも同様のことをしたいと思うでしょう。

130
mu is too short

usernameconfig/database.ymlで指定されていない場合、PostgreSQLはアカウント(ログイン)名でデータベースを作成しようとします。 OS XおよびLinuxでは、whoamiでこれが誰であるかを確認できます。 Windowsを使用しているようです。

ソリューションA:PostgreSQLユーザーの作成 探しているものと一致します。例えば

createuser --superuser some_user

解決策B:明示的にユーザー名を設定して、DBユーザーを変更します muの答えに示すように

7
Dennis

たとえば、postgresと呼ばれるpostgresのマシンに特定のアカウント/ユーザーがいる場合。

次に、このコマンドを実行すると、ロール名を入力するプロンプトが表示されます。

Sudo -u postgres createuser --interactive

それから

rake db:create

動作するはずです!

6
Ishan Kanade