在Pg中我们习惯会从pg_class中查看某个表的oid,当对表进行truncate或vacuum full之后,filenode会发生变化,但oid在pg_class中不会被更新。
如,创建两个测试表:
test=# CREATE TABLE t1(id int);
CREATE TABLE
test=# CREATE TABLE t2(id int);
CREATE TABLE
查看这两个表的oid及filenode:
test=# SELECT oid,relname,relfilenode from pg_class where relname='t1' or relname='t2';
oid | relname | relfilenode
-------+---------+-------------
94683 | t2 | 94683
94680 | t1 | 94680
(2 rows)
对表进行truncate或vacuum full:
test=# TRUNCATE t1;
TRUNCATE TABLE
test=# VACUUM FULL t2;
VACUUM
再次查看oid及filenode:
test=# SELECT oid,relname,relfilenode from pg_class where relname='t1' or relname='t2';
oid | relname | relfilenode
-------+---------+-------------
94680 | t1 | 94686
94683 | t2 | 94687
(2 rows)
可以看出oid并未发生变化,只有filenode被更改,这是因为实际的表文件已经变更。