初始化 fork

为未记日志表创建的空表或索引

一个 初始化 fork 是为 未记日志表 创建的相应类型的空表或索引。如果未记日志表在崩溃后被重新初始化,初始化 fork 将会被复制到主 fork 上。

源代码

处理未记日志表重新初始化的代码位于:src/backend/storage/file/reinit.c,具体函数为 ResetUnloggedRelations()

后者由 StartupXLOG() 中的 src/backend/access/transam/xlog.c 调用。

示例

初始化 fork 使用后缀 _init 进行创建

postgres=# CREATE UNLOGGED TABLE foo (id int primary key);
CREATE TABLE

postgres=# SELECT pg_relation_filepath('foo'), pg_relation_filepath('foo_pkey')
 pg_relation_filepath | pg_relation_filepath 
----------------------+----------------------
 base/13261/16499     | base/13261/16502
(1 row)

postgres:data$ ll base/13261/16499*
-rw------- 1 postgres postgres 0 Nov 17 11:01 base/13261/16499
-rw------- 1 postgres postgres 0 Nov 17 11:01 base/13261/16499_init

postgres:data$ ll base/13261/16502*
-rw------- 1 postgres postgres 8192 Nov 17 11:01 base/13261/16502
-rw------- 1 postgres postgres 8192 Nov 17 11:01 base/13261/16502_init

在向表中插入一些数据后

postgres:data$ ll base/13261/16499*
-rw------- 1 postgres postgres 368640 Nov 17 11:09 base/13261/16499
-rw------- 1 postgres postgres  24576 Nov 17 11:09 base/13261/16499_fsm
-rw------- 1 postgres postgres      0 Nov 17 11:01 base/13261/16499_init

postgres:data$ ll base/13261/16502*
-rw------- 1 postgres postgres 245760 Nov 17 11:09 base/13261/16502
-rw------- 1 postgres postgres   8192 Nov 17 11:01 base/13261/16502_init

分类

PostgreSQL内部, 存储

反馈

提交关于“Initialization fork”(初始化 fork)的任何评论、建议或更正,请在此处 提交