我正在设置PostgreSQL 9.1。我不能用PostgreSQL做任何事情:不能createdb,不能createuser;所有操作都返回错误消息
Fatal: role h9uest does not exist
h9uest是我的帐户名,我在这个帐户下执行apt-get安装PostgreSQL 9.1。 根帐户仍然存在类似的错误。
我正在设置PostgreSQL 9.1。我不能用PostgreSQL做任何事情:不能createdb,不能createuser;所有操作都返回错误消息
Fatal: role h9uest does not exist
h9uest是我的帐户名,我在这个帐户下执行apt-get安装PostgreSQL 9.1。 根帐户仍然存在类似的错误。
当前回答
psql postgres
postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
其他回答
使用操作系统用户postgres来创建你的数据库——只要你还没有建立一个数据库角色,该角色具有与你的操作系统用户同名(在你的例子中是h9uest)对应的必要权限:
sudo -u postgres -i
按照这里或这里的建议。
然后再试一次。当以系统用户postgres的身份操作时,输入exit。
或者使用sudo以postgres的形式执行createuser命令,就像drees在另一个答案中演示的那样。
关键是使用与同名数据库角色匹配的操作系统用户通过身份验证授予访问权限。Postgres是初始化数据库集群的默认操作系统用户。手册:
为了引导数据库系统,需要重新初始化 系统中总是包含一个预定义角色。这个角色总是一个 默认情况下(除非在运行initdb时更改) 将与初始化的操作系统用户具有相同的名称 数据库集群。通常,这个角色将被命名为postgres。 为了创建更多的角色,你首先必须像这样连接 最初的作用。
我听说过使用非标准用户名或操作系统用户不存在的奇怪设置。你需要调整你的策略。
阅读手册中的数据库角色和客户端身份验证。
psql postgres
postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
使用——no-owner——no-privileges标记转储和恢复
e.g.
Dump - pg_dump——no-owner——no-privileges——format=c——dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump
恢复- pg_restore——no-owner——no-privileges——format=c——dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump
在尝试了许多其他人的解决方案后,都没有成功,这个答案最终帮助了我。
https://stackoverflow.com/a/16974197/2433309
简而言之,跑步
sudo -u postgres createuser owning_user
创建名为owning_user(在本例中为h9uest)的角色。在此之后,您可以在终端上运行rake db:create,使用您设置的任何帐户名,而无需进入Postgres环境。
在我的案例中,手动创建一个DB集群解决了这个问题。
由于某种原因,当我安装postgres时,没有创建“初始DB”。执行initdb对我来说很管用。
这个解决方案在PostgreSQL Wiki -第一步:
initdb 通常情况下,在操作系统中安装postgres会创建一个“初始DB”,并启动postgres服务器守护进程。如果没有,则需要运行initdb