在 PostgreSQL 中,关于默认表空间 pg_default 和 pg_global 的以下说法,哪些是正确的?
A
pg_default 负责存储整个集群中所有数据库共享的系统表。
B
当创建用户时,如果未指定表空间,默认存储在 pg_global 中。
C
当创建用户时,如果未指定表空间,默认存储在 pg_default 中。
D
pg_global 负责存储整个集群中所有数据库共享的系统表。
选项D:pg_global 负责存储整个集群中所有数据库共享的系统表
• 正确。pg_global表空间专门用于存储集群级别的共享系统表,例如pg_database(数据库元数据)、pg_authid(用户权限信息)等。这些表对所有数据库可见且共享。
• 物理存储路径为PGDATA/global/,与具体数据库无关。选项C:当创建用户时,如果未指定表空间,默认存储在 pg_default 中
• 正确。pg_default是用户对象的默认表空间。当创建用户表、索引或数据库时,若未显式指定表空间,所有数据会存储在pg_default中。
• 物理存储路径为PGDATA/base/,每个数据库在该目录下对应一个子目录(以数据库OID命名)。
错误选项分析
选项A:pg_default 负责存储整个集群中所有数据库共享的系统表
• 错误。pg_default仅存储用户数据和单个数据库的系统目录对象(例如用户创建的表、索引等),而非集群级共享系统表。集群级共享系统表由pg_global管理。选项B:当创建用户时,如果未指定表空间,默认存储在 pg_global 中
• 错误。pg_global仅用于存储全局系统表,普通用户对象无法存储在此表空间中。用户对象的默认存储位置始终是pg_default。
补充说明
• 表空间的作用:
• pg_default和pg_global是PostgreSQL初始化集群时自动创建的两个表空间。
• 用户可通过CREATE TABLESPACE自定义表空间,但名称不能以pg_开头(保留给系统表空间)。
• 查询表空间信息:
• 使用\db命令查看所有表空间列表。
• 通过系统表pg_tablespace获取详细信息(如OID、路径等)。




