表空间 是数据存储在主数据目录以外的位置。这使得可以将数据分布在多个文件系统上,例如将更频繁访问的数据存储在更快的存储上,或者将表数据和索引分散在不同的磁盘上。
表空间是在 PostgreSQL 8.0 中引入的。
psql 命令
\db列出集群可用的表空间的基本信息\db+显示附加信息,例如表空间大小
系统目录
表空间信息存储在 系统目录表 pg_tablespace 中。
配置
以下 配置参数 影响表空间的使用
default_tablespace: 当CREATE命令或数据库的默认表空间设置未被覆盖时,用于创建(非临时)对象(表和索引)的默认表空间temp_tablespaces: 用于创建临时对象的表空间列表
表空间函数
以下函数提供与表空间相关的信息
pg_tablespace_databases(tablespace_oid): 返回存储有在该表空间中对象的数据库的 OID 列表pg_tablespace_location(tablespace_oid): 返回表空间目录的磁盘路径(PostgreSQL 9.2 及更高版本;仅适用于非默认表空间)pg_tablespace_size(tablespace_oid or tablespace_name): 返回指定表空间的大小(PostgreSQL 8.1 及更高版本)has_tablespace_privilege(tablespace, privilege): 当前用户是否对表空间具有权限has_tablespace_privilege(user, tablespace, privilege): 指定用户是否对表空间具有权限
变更历史
进行中
- PostgreSQL 18
- 源代码常量
PG_TBLSPC_DIR和PG_TBLSPC_DIR_SLASH已添加(提交 c7cd2d6e)
- 源代码常量
- PostgreSQL 15
- 已添加
allow_in_place_tablespaces开发 GUC(提交 7170f215)
- 已添加
- PostgreSQL 14
- 已添加对重新索引表空间的支持(提交 c5b28604)
- PostgreSQL 9.2
pg_tablespace_location()已添加(提交 16d8e594)
- PostgreSQL 8.3
temp_tablespacesGUC 已添加(提交 acfce502)
- PostgreSQL 8.1
pg_tablespace_size()已添加(提交 358a897f)
- PostgreSQL 8.0
- 添加 (提交 2467394e)
参考资料
- PostgreSQL 文档: 表空间
- PostgreSQL 文档: CREATE TABLESPACE
- PostgreSQL 文档: ALTER TABLESPACE
- PostgreSQL 文档: DROP TABLESPACE
- PostgreSQL 文档: default_tablespace
- PostgreSQL 文档: temp_tablespaces
有用链接
- 何时在 PostgreSQL 中使用表空间 - CyberTec 的 2020 年 3 月博客文章
