Postgresql:致命:角色不存在

时间:2016-08-18 17:20:12

标签: postgresql command-line

我正在设置Postgresql以用于Rails应用程序,但我似乎无法连接或正确配置数据库(启动Rails服务器后出现的错误是:{{1} }和ActiveRecord::NoDatabaseError)。

我从关于此主题的其他几十个问题中收集了我需要切换到的内容,或者创建了“MyComputer”角色,但是我注意到它们都需要使用could not translate host name "MyProfile" to address: nodename nor servname provided, or not known命令。当我甚至只运行psql时,我会再次收到错误psql

到目前为止,我一直在关注Heroku的安装过程,并且在安装完成后卡住了here(或更准确here,其中Heroku说运行FATAL: role "MyProfile" does not exist应该有效。我在这里错过了一个明显的步骤/做错了吗?

我也尝试过:

psql -h localhost
sudo su - MyProfile的变种

还有一些其他命令正在努力创建这个roll / user,但我似乎无法完成解决问题所需的工作。

修改
我还运行sudo -u postgres createuser owning_user,看起来所有与postgres相关的PID都在“MyProfile”下运行(假设我正在读它)。但psql命令仍然返回该角色不存在。 #sadface

编辑2
我刚打开Postgres应用程序并单击“打开psql”按钮。它打开终端,运行命令(ps aux | grep postgres),然后给了我同样的错误('/Applications/Postgres.app/Contents/Versions/9.5/bin'/psql -p5432)。或许这对我来说这是一个系统问题,而不是Rails问题?

编辑3
这肯定是一个问题,而不是铁路问题。我刚刚卸载了应用程序,使用SQLite(yucks)重新安装它,运行本地服务器并显示测试登录页面。所以问题似乎是我的本地机器,而不是应用程序本身。删除了RoR标签,仍在寻找Postgres大师关于角色问题为何仍然存在的答案:)

3 个答案:

答案 0 :(得分:0)

如果您使用Postgres.app,则应从config/database.yml中删除用户名和密码。此错误也告诉您,您已输入MyProfile而不是(或PG角色)的用户,而是作为数据库连接的主机(而不是localhost)。

这是您config/database.yml Postgres.app运行所需的全部内容:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

通常最好将其删除,让绝对必须在他的dev postgres服务器上拥有密码的傻瓜使用DATABASE_URL env var

答案 1 :(得分:0)

多么糟糕......我忘了提到的一件事,那可能对社区有天文数字帮助的是我接管别人的机器。有一些挥之不去的设置,只是决定他们不会发挥出色。

在一天结束时,我摆脱了Postgress.app,用Homebrew安装了postgres,我需要的余额在这里:http://exponential.io/blog/2015/02/21/install-postgresql-on-mac-os-x-via-brew/

特别是保存我的行是createdb 'whoami'查看实际帖子...语法与我刚刚写的因为stackoverflow格式有点不同)...回想起来似乎很明显,但它帮助我当前登录的用户通过实际创建整个设置所需的psql数据库来克服其他旧用户的预设。

经验教训!

感谢@max的帮助,帮助我避免了我即将引起的另一个问题!

答案 2 :(得分:0)

使用Postgresql设置新的Rails应用程序时遇到了类似的问题。我在下面收到以下错误消息

FATAL:  role "promisepreston" does not exist
Couldn't create 'MyBlog_development' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: FATAL:  role 

Caused by:
PG::ConnectionBad: FATAL:  role "promisepreston" does not exist

要解决此问题,只需遵循以下解决方案

首先,我们需要通过命令行界面登录到postgres用户帐户;

sudo su - postgres

接下来,使用psql客户端作为postgres角色连接到数据库服务器:

psql -U postgres

欢迎使用PostgreSQL交互式终端psql 10.6。

postgres@Preston-PC:~$ psql -U postgres
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help

postgres=#

接下来,与psql客户端连接,我们将创建一个具有LOGIN属性和密码的角色,该角色可以创建数据库并管理角色:

postgres=# create role rolename with createdb login password 'password1';

在SQL语句的末尾注意所需的尾部分号(;)。单引号(‘)不是密码的一部分,但必须将其括起来。

它起作用了吗?您可以使用\ du命令进行检查:

postgres=# \du

您现在可以运行命令为Rails应用程序创建数据库;

rails db:create

然后运行命令为Rails应用程序迁移数据库;

rails db:migrate

就是这样。

我希望这对您有帮助

在有帮助的情况下将此答案赞为有用,或在答案下方评论以进一步说明。