使用PostgreSQL时,角色不存在且无法创建数据库

Lea*_*RoR 59 ruby postgresql ruby-on-rails ruby-on-rails-3

我使用Heroku作为我的应用程序,它需要PostgreSQL,但你仍然可以使用SQLite3进行开发.由于Heroku强烈建议不要使用2个不同的数据库,所以我决定改用PostgreSQL进行开发.我安装了gem pg并且还去了官方PostgreSQL站点以获取Windows安装程序并且还更改了我的database.yml.在安装过程中,它需要一个PostgreSQL的密码,所以我做了一个.我不得不改变pg_hba.conf文件使用md5trust,为了得到过去: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
Run Code Online (Sandbox Code Playgroud)

在摆脱了这个之后,我现在得到了这个:

$ 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} 
Run Code Online (Sandbox Code Playgroud)

我仍然有我development.sqlite3text.sqlite3现在,会是这个问题?必须做什么?

以下是我的全部要点:https://gist.github.com/1522188

mu *_*ort 131

添加用户名database.yml,也可以使用您的应用程序名称(或名称的某个变体)作为用户名,我将app_name用作占位符:

development:
  adapter: postgresql
  encoding: utf8
  database: app_development
  pool: 5
  username: app_name
  password:
Run Code Online (Sandbox Code Playgroud)

然后使用psql.exe以下命令在PostgreSQL中创建用户(AKA"角色"):

$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q
Run Code Online (Sandbox Code Playgroud)

第一行是在你的终端,接下来的两行在里面psql.然后做你的rake db:create.

User用户可能是一个默认值,但user已采取了 PostgreSQL中用于其他用途,所以你不得不引用它,如果你想使用保存的情况下User为用户名:

postgres=# create role "User" login createdb;
Run Code Online (Sandbox Code Playgroud)

无论如何,最好为每个应用程序创建一个用户.

您也希望为自己的test参赛作品做类似的事情database.yml.

  • @wrbg:你能用psql -d postgres -U postgres`吗? (3认同)
  • 它不允许我进入`psql.exe`。当我尝试打开它时,窗口出现然后自动关闭,所以我尝试转到 cmd 提示符并输入 `c:\Program Files..\..\bin > psql.exe > psql: FATAL:角色“用户”不存在`再次获得`FATAL`。有任何想法吗? (2认同)
  • @wrbg:您在安装过程中创建了一个 `postgres` 用户,对吗?试试`psql -d postgres -U postgres`,如果你需要密码,那么`psql -d postgres -U postgres -W`。 (2认同)
  • @wrbg:您可以在`psql`中使用`\ du`来查看用户/角色及其权限,或者使用`\ l`来列出数据库.如果您的用户设置正确,那么`rake db:create`应该创建数据库,并且`psql -U app_name -d app_development`应该进入它. (2认同)

Den*_*nis 7

PostgreSQL将尝试使用您的帐户(登录)名称创建数据库(如果username未在您的帐户中指定)config/database.yml.在OS X和Linux上,您可以看到这是谁whoami.看起来你正在使用Windows.

解决方案A: 创建一个匹配它正在寻找的用户的PostgreSQL用户.例如

createuser --superuser some_user
Run Code Online (Sandbox Code Playgroud)

解决方案B: 通过显式设置用户名更改数据库用户,如mu的答案所示.


小智 6

例如,如果您的计算机上有特定帐户/用户,则称为postgres.

然后执行此命令将提示您输入角色名称.

sudo -u postgres createuser --interactive
Run Code Online (Sandbox Code Playgroud)

然后做

rake db:create
Run Code Online (Sandbox Code Playgroud)

应该管用!