Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Postgres数据库文件是如何更新的?_Postgresql - Fatal编程技术网

Postgresql Postgres数据库文件是如何更新的?

Postgresql Postgres数据库文件是如何更新的?,postgresql,Postgresql,我很好奇Postgres数据库的/base文件是如何更新的。段是否与每个表的段相对应,以便在更新表的子集后只更新少数段文件?或者,表的更新会导致所有或大部分段文件的更改吗 基本上,我对用于备份的/base文件的这些更新的可靠性感兴趣。考虑到使用WAL for PITR,我有一种感觉,这些文件并没有以任何连贯的方式为我的目的进行更新 根据: 当一个表或索引超过1GB时,它被划分为GB大小 部分。第一段的文件名与filenode相同; 随后的段被命名为filenode.1、filenode.2等 这

我很好奇Postgres数据库的
/base
文件是如何更新的。段是否与每个表的段相对应,以便在更新表的子集后只更新少数段文件?或者,表的更新会导致所有或大部分段文件的更改吗

基本上,我对用于备份的
/base
文件的这些更新的可靠性感兴趣。考虑到使用WAL for PITR,我有一种感觉,这些文件并没有以任何连贯的方式为我的目的进行更新

根据:

当一个表或索引超过1GB时,它被划分为GB大小 部分。第一段的文件名与filenode相同; 随后的段被命名为filenode.1、filenode.2等 这种安排避免了在具有文件大小的平台上出现问题 局限性(实际上,1GB只是默认的段大小 可以使用配置选项调整段大小
——在构建PostgreSQL时使用segsize
)原则上,自由空间映射和可见性映射分叉也可能需要多个段, 尽管这在实践中不太可能发生


在您引用的链接中,您还会发现表和索引被组织在8KB的块中,并且表行总是包含在一个块中

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

索引的可预测性较差:如果更新是热的,则不会修改任何内容。如果需要分割索引页,可能会影响多个块

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


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

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

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

索引的可预测性较差:如果更新是热的,则不会修改任何内容。如果需要分割索引页,可能会影响多个块

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


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

我投票将此问题作为离题问题结束,因为它也被交叉发布给DBA。我投票结束这个问题,因为它也被交叉发布给DBA。