Postgresql 使用CREATEDB的ALTER ROLE和在表空间上授予CREATE之间的区别

Postgresql 使用CREATEDB的ALTER ROLE和在表空间上授予CREATE之间的区别,postgresql,Postgresql,来自MySQL,不知道角色,我心不在焉地尝试了这个 GRANT CREATE ON TABLESPACE pg_default TO username; 它没有达到预期的效果。我要找的命令是: ALTER ROLE username WITH CREATEDB; 但到底有什么区别呢?给某人CREATEDB角色是否意味着给他们CREATE ON TABLESPACE。。。?有没有一张桌子可以让我看到这些 从中,GRANT CREATE ON TABLESPACE意味着(我的重点): 对于表空间

来自MySQL,不知道角色,我心不在焉地尝试了这个

GRANT CREATE ON TABLESPACE pg_default TO username;
它没有达到预期的效果。我要找的命令是:

ALTER ROLE username WITH CREATEDB;
但到底有什么区别呢?给某人CREATEDB角色是否意味着给他们CREATE ON TABLESPACE。。。?有没有一张桌子可以让我看到这些

从中,GRANT CREATE ON TABLESPACE意味着(我的重点):

对于表空间,允许使用表, 索引和要创建的临时文件 在表空间中创建,以及 允许创建数据库 创建了具有 表空间作为默认值 表空间。(请注意,取消此选项 特权不会改变位置 现有对象的名称。)


第一条语句似乎为您提供了创建表空间的能力。这是保存数据/索引的物理文件(或存储设备上的空间)。。。这是数据库的一部分


因此,实际上您使用命令授予了两种不同的权限。

与。

它们是完全不同的权限。CREATEDB表示角色可以创建数据库。如果您的角色没有这个功能,它将无法创建数据库,句号

将CREATE for表空间授予角色意味着该角色将能够使用该表空间作为数据库的默认表空间。因此,具有CREATEDB的角色将能够创建数据库;只是不在那个表空间上。请注意,对于没有默认表空间的数据库,总会有一个pg_默认表空间用作默认表空间