時間:2024-02-05 11:03作者:下載吧人氣:24
作者李傳成
中國PG分會認證專家,瀚高軟件資深內核研發工程師
https://zhuanlan.zhihu.com/p/342466054
PostgreSQL中的表會有一個RelFileNode值指定這個表在磁盤上的文件名(外部表、分區表除外)。一般情況下在pg_class表的relfilenode字段可以查出這個值,但是有一些特定表在relfilenode字段的查詢結果是0,這個博客中將會探究這些特殊表relfilenode的內核處理。
當我們創建一張普通表時,在pg_class系統表里可以查詢出其relfilenode,可以看出在表剛剛創建時其oid和relfilenode都是16808,在磁盤上也可以查詢到16808這個文件。事實上,這個文件存儲了我們向表t2插入的數據。
postgres=# create table t2(i int);
CREATE TABLE
postgres=# select oid,relname,relfilenode from pg_class where relname = ‘t2’;
oid | relname | relfilenode
——-+———+————-
16808 | t2 | 16808
(1 row)
postgres=# q
movead@movead-PC:/h2/pgpgpg/bin$ ll ../data/base/12835/16808
-rw——-+ 1 movead movead 0 12月 31 17:11 ../data/base/12835/16808
movead@movead-PC:/h2/pgpgpg/bin$
網友評論