我对 PostgreSQL 中的表空间感到困惑。它像LVM吗?我的意思是当磁盘已满时,我们可以添加另一个磁盘,然后格式化CREATE TABLESPACE tblspace LOCATION /media/disk2/data
吗?够了吗?或者我们应该手动使用ALTER
数据库、表或索引来利用它?
我对 PostgreSQL 中的表空间感到困惑。它像LVM吗?我的意思是当磁盘已满时,我们可以添加另一个磁盘,然后格式化CREATE TABLESPACE tblspace LOCATION /media/disk2/data
吗?够了吗?或者我们应该手动使用ALTER
数据库、表或索引来利用它?
从历史上看,PostgreSQL 将表和索引存储在单个文件中。表空间是一种将多个表/索引放入同一目录中的单个文件或一组相关文件的方法。其他数据库管理系统使用类似的技术,尽管 tney 可以在一个文件中存储多个对象。在 PostgreSQL 上,表空间被实现为放置单个文件的目录,但文件仍然是每个数据库对象一个。
除非已分区,否则表必须驻留在单个表空间中,在这种情况下,每个分区都必须驻留在给定的表空间中。在某些 DBMS 平台上,您可以按照您的建议将文件添加到表空间,尽管在 PostgreSQL 的情况下,表空间本质上只是一个用于将文件分组在一起的目录。在可能发生这种情况的系统上,它可能会导致 I/O 性能欠佳,因为单个磁盘可能包含 I/O 热点。或许,您最好在一个 RAID 卷中设置多个磁盘并将表空间放置在上面。
根据您的工作负载,您可能希望在每个卷上设置带有表空间的单个磁盘卷,并将数据库的一部分分布在不同的卷上。最简单的情况是将数据库日志分离到一个单独的卷上,但您可以出于各种原因将数据分布在多个卷上。
编辑:这是 PostgreSQL 表空间的链接。
不,这还不够——确实,如果“初始化集群的分区或卷空间不足且无法扩展,则可以在不同的分区上创建表空间并使用它,直到可以重新配置系统。 " ,但当前对象不会自动溢出到新表空间中,就像您提到 LVM 时的意思一样——它们需要被移动,例如
alter table
:表空间的完整文档可以在这里找到并详细说明它们的用途,包括上面关于空间不足的引用,例如: