Postgres:创建角色并使用psql登录 -U角色

6

代码:

postgres=# create role hello;
CREATE ROLE
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 hello     | Cannot login                                   | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

postgres=# ALTER ROLE hello WITH LOGIN;
ALTER ROLE
postgres=# ALTER ROLE hello WITH CREATEDB;
ALTER ROLE
postgres=# \du
                             List of roles
 Role name |                   Attributes                   | Member of
-----------+------------------------------------------------+-----------
 hello     | Create DB                                      | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}

postgres=# ALTER ROLE hello WITH PASSWORD '123';
ALTER ROLE
postgres=# \q
-bash-4.2$ logout
[root@host test_user]# psql -U hello
Password for user hello:
psql: FATAL:  database "hello" does not exist

我正在尝试在Postgres中创建名为hello的角色,使用CREATE ROLE命令更改它的登录和创建数据库权限。但是,当我尝试使用-U登录时,出现了上述错误信息。我对-U的理解是否有误?

2
您尚未创建数据库 hello - Mekicha
你的意思是当你创建一个角色时,需要有一个同名的数据库吗? - wonder
1
是的。Postgres期望这样。 - Mekicha
但是在CREATE ROLE选项中没有创建数据库的选项。我认为我需要手动创建它。 - wonder
1
你必须以不同的方式创建数据库。就在shell上。在登录之前执行“CREATE DATABASE hello;”是必需的。是的,要手动操作。 - Mekicha
2个回答

6
默认情况下,Postgres认证系统假设将存在一个与登录使用的角色同名的数据库,并且该角色具有对其的访问权限。
更多信息请参见:链接
创建数据库后,您可以执行以下操作:
sudo -u hello psql

自动登录到shell。

创建数据库后,我能够成功登录。但是,在shell中我看到了类似于hello=>这样的东西,而在postgres中则是这样的 - postgres=#。这两个符号之间有什么区别呢?>#的不同之处在哪里? - wonder
6
#代表超级用户账户提示符。=>表示你不是超级用户。 - Mekicha
谢谢。我明白了。 - wonder

0

我遇到了类似的问题,基本上Postgres期望你选择一个数据库,

当你运行命令 psql -U hello

它会假定你正在尝试访问hello数据库, 但默认情况下只创建了postgres数据库。 请尝试使用以下命令 psql -U hello postgres


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接