源代码
处理未记日志表重新初始化的代码位于: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 documentation: The Initialization Fork(初始化 fork)
