暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL之表空间

原创 seven 2023-04-03
1468

1、什么是PG中的表空间(tablespace)?



pg中的表空间实际上就是文件系统中的一个目录, 是pg中数据库对象(包括表、索引等)的容器。

Pg使用操作系统的文件系统进行对象存储,每个数据库对象都有自己的数据文件,如果对象很大,它将会被分为多个文件,单个文件大小的上限是1GB。表空间就是包含这些数据文件的目录。

简而言之,表空间是告诉PG服务器将数据库对象的物理文件放在哪里。



2、表空间的分类?


默认表空间:pg_default ,是用户表、用户表index、和临时表、临时表index、内部临时表的默认空间。对应文件系统目录$PADATA/base/。

系统字典表表空间:pg_global,存放系统字典表,如pg_database、pg_authid、pg_tablespace等表以及它们的索引。对应文件系统目录$PADATA/global/。

自定义表空间:用户创建的表空间。对应文件系统目录$PADATA/pg_tblspc/, 当手动创建表空间时,该目录下会自动生成一个软链接,指向表空间设定的路径。

其中pg_default和pg_global是在PG集群initdb之后默认创建的。


3、查看当前集群中所有的表空间?


PSQL使用"\db+"命令,可以详细列出表空间。


postgres=# \db+

List of tablespaces

Name | Owner | Location | Access privileges | Options | Size | Description

------------+-------+-------------+-------------------+---------+---------+-------------

pg_default | root | | | | 22 MB |

pg_global | root | | | | 573 kB |

mytbsp |root | tmp/mytbsp | | | 0 bytes |

其中mytbsp是用户自己创建的表空间。

查看pg_tblspc目录下,发现有一个软链接16385(16385是这个表空间的OID), 指向表空间设定的路径,此处为/tmp/mytbsp


/tmp$ ls -l data/pg_tblspc

total 0

lrwxrwxrwx 1 alice alice 11 May 8 11:47 16385 -> tmp/mytbsp

也可以使用sql查看所有表空间:

select oid,* from pg_tablespace;


4、表空间的创建和使用?


1)要创建表空间,首先创建一个新目录,注意该目录需要属于“postgres”操作系统用户。

2)使用sql创建表空间。

CREATE TABLESPACE mytbsp LOCATION '/tmp/mytbsp';


3)使用表空间。

大多数“create” SQL命令都带有一个“TABLESPACE”选项,我们可以使用这个选项指定SQL对象的表空间。

如:

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论