如其名称所示,表空间目录
是一个与特定 表空间 关联的文件系统目录,其中存储与该表空间相关的所有数据。
在执行 CREATE TABLESPACE
时指定 表空间目录
,例如:
CREATE TABLESPACE foo LOCATION '/tmp/tblspc_test'
先决条件
表空间目录必须由运行 PostgreSQL 进程的系统用户拥有(组写权限不足),并且不能被来自同一 PostgreSQL 版本的另一个表空间使用。
请注意,表空间目录不需要为空,并且可以包含来自其他 PostgreSQL 版本的表空间目录(这可能是在使用 pg_upgrade
升级 PostgreSQL 实例后出现的情况)。但是,不建议在表空间目录中存储任何文件或创建任何目录。
结构
PostgreSQL 在指定的表空间目录中创建一个子目录来存储实际的表空间数据。子目录名称的格式如下
/tmp/tblspc_test/PG_14_202010291
"14
" 代表 PostgreSQL 主版本,"202010291
" 代表 目录版本号(不是创建表空间的日期)。
最初,该子目录不包含任何数据。
系统函数
可以使用 pg_tablespace_location()
检索表空间目录的文件系统路径。
注意事项和限制
无法使用 PostgreSQL 移动表空间目录(没有命令 ALTER TABLESPACE ... LOCATION ...
或类似命令);而是必须在 PostgreSQL 关闭的情况下手动移动表空间。
无法“分离”或“附加”表空间;包含表空间的每个目录在 PostgreSQL 运行期间必须始终可用于读写操作。但是,可以在表空间之间移动单个数据库对象。
示例
postgres=# CREATE TABLESPACE foo LOCATION '/tmp/tblspc_test'; CREATE TABLESPACE $ ls -l /var/lib/pgsql/data/pg_tblspc/ total 0 lrwxrwxrwx 1 postgres postgres 16 Nov 6 14:38 16495 -> /tmp/tblspc_test $ ls -l /tmp/tblspc_test/ total 4 drwx------ 2 postgres postgres 4096 Nov 6 14:38 PG_14_202010291 $ ls -l /tmp/tblspc_test/PG_14_202010291 total 0 postgres=# CREATE TABLE foo (id INT) TABLESPACE foo; CREATE TABLE $ find /tmp/tblspc_test/PG_14_202010291/ /tmp/tblspc_test/PG_14_202010291/ /tmp/tblspc_test/PG_14_202010291/12869 /tmp/tblspc_test/PG_14_202010291/12869/16452
另请参见
表空间,CREATE TABLESPACE,数据目录