我为rails的数据库选择了postgresql,但当我尝试运行rake db:create:all时,遇到了一个明显常见的错误,即"FATAL:role"app"不存在"。我找到了两种解决方案,但不确定哪一种是正确的。一个网站对说
su -
su - postgres
createuser -s Application
exit
exit
而另一个对说
su - postgres
create role myapp with createdb login password 'password1'
两者有什么区别?我应该用哪一个?
您应该仅将其用于开发环境
登录postgres控制台:
$> sudo -u postgres psql
创建名为rails
、密码为的用户
=# create user rails with password 'password';
使用户rails
成为超级用户:
=# alter role rails superuser createrole createdb replication;
使用所有者rails
:创建数据库projectname
=# create database projectname owner rails;
在database.yml
:中
development:
adapter: postgresql
encoding: unicode
database: projectname
pool:
username: rails
password: password
要创建用户,请在控制台中键入
createuser
输入用户名并使其成为超级用户
此外,您还可以通过添加pwprompt来添加密码,以创建像这样的用户
createuser --pwprompt
接下来,您输入pgsql作为postgres并创建数据库
sudo-u postgres psql postgres创建数据库数据库名称所有者用户名;
希望它能帮助
有关更多详细信息,请参阅此网站https://www.digitalocean.com/community/articles/how-to-install-and-use-postgresql-on-ubuntu-12-04
第二个选项无效。这行不通。
第一个:
我不推荐第一个步骤,根据您的操作系统,有些步骤是不必要的。
- 您成为超级用户,并使shell成为登录shell(就像您将直接登录一样)。我认为这是有风险的,没有必要。为什么不直接向postgre用户发送
su
(这只是设置问题) - 您成为postgre并使shell成为登录shell
- 您可以在PostgreSQL中创建一个超级用户应用程序。因此,您拥有应用程序的超级用户权限。我认为这也有风险。应用程序的超级用户非常糟糕。通常,您需要
createdb
、login
和password
才能开始,如果需要,可以稍后添加/撤销其他权限 - 您退出postgresshell会话
- 您退出超级用户shell会话
第二个:
这是不对的。第二步忘记执行psql
命令。第二个命令将成为第三个命令。会是那样的。
- 您成为postgres并使shell成为登录shell
- 默认情况下,您使用用户postgres登录到postgres命令shell
- 您可以创建一个角色
myapp
,选项为createdb
、login
和(通常默认情况下已加密)password
,值为password1
不同之处在于,第一个向应用程序角色授予超级用户权限,而第二个仅向myapp
角色授予列出的权限
第二种选择更安全。在这两个选项中,选择seoconde选项。
注意:在PostgreSQL中,用户只是一个具有login
权限的角色。这更多的是一种概念上的区别。据我所知,从技术上讲,用户和角色基本相同。