关于身份验证:PostgreSQL错误:致命:角色“用户名”不存在 role “username” does not exist

PostgreSQL error: Fatal: role “username” does not exist

我正在设置我的PostgreSQL 9.1。我对PostgreSQL不能做任何事情:不能createdb,不能createuser;所有操作都返回错误消息

1
Fatal: ROLE h9uest does NOT exist

h9uest是我的账户名,我在这个账户下是sudo apt-get installpostgresql 9.1。对于root账户,同样的错误仍然存在。


使用操作系统用户postgres创建数据库-只要您没有使用与同名操作系统用户相对应的必要权限设置数据库角色(在您的情况下为h9uest):

1
sudo -u postgres -i

按照这里或这里的建议。

然后再试一次。当以系统用户身份进行操作时,键入exit

或者用sudo执行单命令createuser作为postgres,就像在另一个答案中drees所证明的那样。

重点是使用与同一名称的数据库角色匹配的操作系统用户,通过ident身份验证授予访问权限。postgres是初始化数据库集群的默认操作系统用户。手册:

In order to bootstrap the database system, a freshly initialized
system always contains one predefined role. This role is always a
"superuser", and by default (unless altered when running initdb) it
will have the same name as the operating system user that initialized
the database cluster. Customarily, this role will be named postgres.
In order to create more roles you first have to connect as this
initial role.

我听说过使用非标准用户名或操作系统用户不存在的奇怪设置。你需要调整你的策略。

阅读手册中有关数据库角色和客户端身份验证的内容。


在尝试了许多其他人的解决方案后,没有成功,这个答案最终帮助了我。

https://stackoverflow.com/a/16974197/2433309

简而言之,跑步

1
sudo -u postgres createuser owning_user

创建一个名称为owning_user的角色(在本例中为h9uest)。之后,您可以在终端上以您设置的任何帐户名运行rake db:create,而无需进入Postgres环境。


1
2
3
sudo su - postgres

psql template1

在具有"超级用户"权限的pgsql上创建角色

1
2
CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

然后创建用户

1
2
CREATE USER username;
eg. CREATE USER demo;

为用户分配权限

1
GRANT ROOT TO username;

然后启用该用户的登录,可以从正常的$终端运行,如:psql template1

1
ALTER ROLE username WITH LOGIN;


使用apt-get安装postgres不会创建用户角色或数据库。

要为您的个人用户帐户创建超级用户角色和数据库,请执行以下操作:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


这对我很有用:

1
psql -h localhost -U postgres


工作方法

  • vi /etc/postgresql/9.3/main/pg_hba.conf
  • local all postgres peer在这里,把同伴变为信任
  • 重启,sudo service postgresql restart

  • 现在试试看,psql -U postgres


  • 我在MacOS上安装了它,必须:

    1
    2
    3
    cd /Applications/Postgres.app/Contents/Versions/9.5/bin
    createuser -U postgres -s YOURUSERNAME
    createdb YOURUSERNAME

    资料来源:https://github.com/postgresapp/postgresapp/issues/313 issuecomment-192461641


    在本地用户提示中,而不是根用户提示中,键入

    1
    sudo -u postgres createuser <LOCAL username>

    然后输入本地用户的密码。

    然后输入上一个生成"角色'username'不存在"的命令。

    以上步骤为我解决了这个问题。如果没有,请发送上述步骤的终端消息。


    对于Postgres 9.5版本,请使用以下命令:

    1
    psql -h localhost -U postgres

    希望这会有所帮助。


    手动创建一个DB集群解决了我的问题。

    出于某种原因,当我安装Postgres时,没有创建"初始数据库"。处决埃多克斯一〔23〕对我有好处。

    此解决方案在PostgreSQL wiki中提供-第一步:

    initdb

    Typically installing postgres to your OS creates an"initial DB" and starts the postgres server daemon running. If not then you'll need to run initdb


    遵循这些步骤,它将为您工作:

  • 运行msfconsole
  • 类型数据库控制台
  • 一些信息会显示给你,你选择了告诉你要做的信息:db_connect user:pass@host:port.../database对不起,我不记得了,但它是这样的,然后用database.yml中的信息替换用户、密码、主机和数据库:/usr/share/metasploit-framework/config中的信息。
  • 你会看到的。在后台重建模型缓存。
  • 键入apt get update&apt get upgrade在更新后重新启动终端和午餐msfconsole,它工作正常,您可以通过键入msfconsole: msf>db_status来检查它是否已连接。

  • 1
    2
    3
    4
    psql postgres

    postgres=# CREATE ROLE username superuser;
    postgres=# ALTER ROLE username WITH LOGIN;

    对于Windows用户:psql -U postgres

    您应该看到PostgreSQL的命令行接口:postgres=#


    卸载所有内容并保留postgres.app:

    1
    2
    3
    4
    5
    6
    brew cask uninstall postgres
    brew uninstall postgres
    brew cask install postgres
    rm -rf /Applications/Postgres93.app/
    # shutdown any postgres instance
    # OPEN postgres.app ->"Initialize"

    我想要PostgreSQL 9.6