为什么在“创建数据库”命令中指定表空间时会出现 PostgreSQL 权限错误?

Hug*_*ich 16 postgresql permissions tablespaces aurora amazon-rds

当我在 PostgreSQL 中创建一个数据库而没有明确指定默认表空间时,该数据库的创建没有问题(我以pgsys用户身份登录):

postgres=> 创建数据库rich1;
创建数据库
postgres=> \l+
                                                                            数据库列表
   姓名 | 业主 | 编码 | 整理 | 类型 | 访问权限 | 尺寸 | 表空间 | 描述
-----------+----------+----------+-------------+-- -----------+------------------------------------------------+ -----------+------------+------------------------ -------------------
 postgres | pgsys | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 7455 KB | pg_default | 默认管理连接数据库
 管理员 | 管理员 | UTF8 | en_US.UTF-8 | en_US.UTF-8 | rdsadmin=CTc/rdsadmin | 无访问权限 | pg_default |
 富豪1 | pgsys | UTF8 | en_US.UTF-8 | en_US.UTF-8 | | 7233 KB | pg_default |
 模板0 | 管理员 | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/r​​dsadmin | 7345 KB | pg_default | 不可修改的空数据库
                                                             : rdsadmin=CTc/rdsadmin
 模板1 | pgsys | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c/pgsys | 7345 KB | pg_default | 新数据库的默认模板
                                                             : pgsys=CTc/pgsys
(5 行)

如您所见,数据库被放入 pg_default 表空间,但如果我在 tablespace 子句中指定默认表空间(仍然以pgsys 身份登录),我会收到权限错误:

postgres=> 创建数据库rich2 表空间pg_default;
错误:表空间 pg_default 的权限被拒绝

这是该用户的权限:

postgres=> \du pgsys
               角色列表
 角色名称 | 属性 | 成员
-----------+-------------+-----------------
 pgsys | 创建角色 | {rds_superuser}
           : 创建数据库

这是 PostgreSQL 错误,但我应该提到这是一个 AWS Aurora 实例,以防万一。

小智 20

这是诀窍,至少对于 pgAdmin v4:将表空间留空。创建数据库时,它将默认为“pg_default”。

  • 对于 DBeaver 客户端,将其留空不是一个选项(控件是一个下拉菜单),所以我只是选择“默认”作为表空间值,这对我有用。 (6认同)