我正在设置 PostgreSQL 9.1。我不能做任何事情的 PostgreSQL:不能createdb
,不能createuser
; 所有操作均返回错误消息
Fatal: role h9uest does not exist
h9uest
是我的帐户名,我在该帐户下sudo apt-get install
root
帐户,类似的错误仍然存在。
使用操作系统用户postgres
创建数据库 - 只要您尚未设置具有与同名操作系统用户(在您的情况下为h9uest
)相对应的必要特权的数据库角色即可:
sudo -u postgres -i
然后再试一次。 postgres
身份操作完成后,请键入exit
。
或者使用sudo
将单个命令createuser
作为postgres
执行,就像 drees 在另一个答案中演示的那样。
关键是要使用与具有相同名称的数据库角色匹配的操作系统用户,以通过ident
验证授予访问权限。 postgres
是已初始化数据库集群的默认操作系统用户。手册:
为了引导数据库系统,新初始化的系统始终包含一个预定义角色。该角色始终是 “超级用户”,默认情况下(除非在运行
initdb
时进行了更改),它将与初始化数据库集群的操作系统用户具有相同的名称。通常,此角色将命名为postgres
。为了创建更多角色,您首先必须作为该初始角色进行连接。
我听说过使用非标准用户名或操作系统用户不存在的奇怪设置。您需要在那里调整策略。
在手册中阅读有关数据库角色和客户端身份验证的信息。
在尝试了许多其他人的解决方案之后,但没有成功,这个答案终于对我有所帮助。
https://stackoverflow.com/a/16974197/2433309
简而言之,跑步
sudo -u postgres createuser owning_user
创建一个名称为 ownering_user 的角色(在本例中为 h9uest)。之后,您可以使用您设置的任何帐户名从终端rake db:create
sudo su - postgres
psql template1
在 pgsql 上创建角色,特权为 “超级用户”
CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;
然后创建用户
CREATE USER username;
eg. CREATE USER demo;
给用户分配权限
GRANT ROOT TO username;
然后启用该用户的登录,因此您可以从普通$
终端psql template1
ALTER ROLE username WITH LOGIN;