这不管用
CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN WITH "role-one";
我收到这个错误
ERROR: unrecognized role option "role-one"
LINE 1: CREATE ROLE "other_role" WITH "role-one";
我做错了什么?我在网上找不到能让我明白语法的例子。从我所见,这应该可行。
如何使用 LOGIN 创建新角色并将其添加到名为 role-one 的另一个角色?
答案1
因为你使用了错误的语法。让我引用一下手动的:
CREATE ROLE name [ [ WITH ] option [ ... ] ] where option can be: ... | IN ROLE role_name [, ...] | ROLE role_name [, ...] ...
IN ROLE
角色名称IN ROLE 子句列出了一个或多个现有角色,新角色将立即作为新成员添加到这些角色中。(请注意,没有将新角色添加为管理员的选项;请使用单独的 GRANT 命令来执行此操作。)
ROLE
角色名称ROLE 子句列出一个或多个现有角色,这些角色会自动添加为新角色的成员。(这实际上使新角色成为一个“组”。)...
(我跳过了不感兴趣的部分)。
因此,正确的语法应该是:
- 如果你想
other_role
成为会员role-one
:
CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN IN ROLE "role-one";
- 如果你想
role-one
成为会员other_role
(反之):
CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN ROLE "role-one";
注意关键词ROLE
以及IN ROLE
你显然跳过了哪些。
还有一种方法可以在两个不同的命令中创建角色并授予成员资格,这在另一个命令中通过详细示例完美地解释了这一点手册页:
CREATE ROLE "role-one" LOGIN;
CREATE ROLE "other_role" LOGIN;
GRANT "role-one" TO "other_role";
在这种情况下,other_role
将成为的成员role-one
。要执行相反的操作,请在最后的 GRANT 中交换它们。
另外,不相关的建议:
- 不要将角色命名为“other_role”和“role-one”。第一个角色应该是“other-role”,第二个角色应该是“role_one”,因此两个角色都包含破折号或下划线。保持一致。这确实有助于让事情变得简单直接;
- 如果你要将角色设为“组”,请考虑添加它没有LOGIN 选项。让它严格地成为一个组。