我很好奇如何为Postgres数据库更新/base
文件。这些段是否对应于每个表的段,以便在更新表的子集后仅更新几个段文件?还是更新表会导致更改所有或大部分细分文件?
基本上,我对/base
文件的这些更新的可靠性(出于备份目的)感兴趣。考虑到WAL用于PITR,我有种感觉,文件没有以任何一致的方式更新。
当表或索引超过1 GB时,它会分为千兆字节大小 段。第一段的文件名与filenode相同; 随后的段分别命名为filenode.1,filenode.2等。 安排可以避免在具有文件大小的平台上出现问题 局限性。 (实际上,1 GB只是默认的段大小。 段大小可以使用配置选项进行调整
--with-segsize
(在构建PostgreSQL时。)原则上,自由空间地图和可见性地图分支也可能需要多个细分, 尽管实际上这种情况不太可能发生。
答案 0 :(得分:2)
在引用的链接上,您还将发现表和索引以8KB的块组织,并且表行始终包含在一个块中。
因此,修改一行最多会影响两个块:一个包含旧行版本的块,另一个写入新版本的块。因此,最多只能影响两个表文件。
索引难以预测:如果更新为HOT,则不会进行任何修改。如果必须进行索引页拆分,则可能会影响几个块。
因为您的主要关注点似乎是可靠性:对数据文件的修改与引起它们的SQL语句异步。该信息将记录在WAL中,然后写入共享内存。修改将最迟在下一个检查点到达磁盘。
WAL负责自上一个检查点以来所有事务的持久性。