Postgres数据库文件如何更新?

时间:2018-10-15 16:46:10

标签: postgresql

我很好奇如何为Postgres数据库更新/base文件。这些段是否对应于每个表的段,以便在更新表的子集后仅更新几个段文件?还是更新表会导致更改所有或大部分细分文件?

基本上,我对/base文件的这些更新的可靠性(出于备份目的)感兴趣。考虑到WAL用于PITR,我有种感觉,文件没有以任何一致的方式更新。

根据the documentation

  

当表或索引超过1 GB时,它会分为千兆字节大小   。第一段的文件名与filenode相同;   随后的段分别命名为filenode.1,filenode.2等。   安排可以避免在具有文件大小的平台上出现问题   局限性。 (实际上,1 GB只是默认的段大小。   段大小可以使用配置选项进行调整   --with-segsize(在构建PostgreSQL时。)原则上,自由空间地图和可见性地图分支也可能需要多个细分,   尽管实际上这种情况不太可能发生。

1 个答案:

答案 0 :(得分:2)

在引用的链接上,您还将发现表和索引以8KB的块组织,并且表行始终包含在一个块中。

因此,修改一行最多会影响两个块:一个包含旧行版本的块,另一个写入新版本的块。因此,最多只能影响两个表文件。

索引难以预测:如果更新为HOT,则不会进行任何修改。如果必须进行索引页拆分,则可能会影响几个块。

因为您的主要关注点似乎是可靠性:对数据文件的修改与引起它们的SQL语句异步。该信息将记录在WAL中,然后写入共享内存。修改将最迟在下一个检查点到达磁盘。

WAL负责自上一个检查点以来所有事务的持久性。