暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgresql中oid与relfilenode傻傻分不清!

原创 _ 2025-02-02
101

1. OID(对象标识符)

  • 定义:OID 是 PostgreSQL 中用于唯一标识数据库对象的无符号 4 字节整数。这些对象可以是表、索引、视图、序列、函数等。
  • 作用:
    • OID 用于在数据库集簇中唯一标识一个数据库对象。
    • OID 存储在系统表中,例如 pg_class 表中记录了表、索引等对象的 OID。
    • OID 通常从 16384 开始分配,系统表和系统对象会预先分配一部分 OID。
  • 查询 OID:
例如:
复制
SELECT oid, relname FROM pg_class WHERE relname = 'pg_class';
复制
  oid   | relname 
复制
-------+---------
复制
 1259 | pg_class
复制

2. relfilenode(文件节点号)

  • 定义:relfilenode 是 PostgreSQL 中用于标识数据库对象(如表、索引、序列等)在文件系统上的物理存储文件的编号。
  • 作用:
    • relfilenode 用于确定数据库对象在磁盘上的存储位置。
    • 每个表或索引在磁盘上都有一个对应的文件,文件名即为 relfilenode。
    • relfilenode 通常与 OID 一致,但在某些操作(如 VACUUM FULL、TRUNCATE 等)后可能会发生变化。
  • 查询 relfilenode:

SELECT oid, relname, relfilenode FROM pg_class WHERE relname = 't1';

 oid  | relname | relfilenode
复制
-----+---------+-------------
复制
33125 | tab_1   | 33136
复制

3. OID 与 relfilenode 的关系

  • 默认情况下:OID 和 relfilenode 的值是相同的。
  • 特殊情况:在某些操作(如 VACUUM FULL、TRUNCATE 等)后,relfilenode 可能会发生变化,而 OID 保持不变。
  • 查询文件路径: PostgreSQL 提供了 pg_relation_filepath 函数,可以根据 OID 或表名查询表的物理存储路径:
SELECT pg_relation_filepath('t1');
复制
 pg_relation_filepath
复制
---------------------
复制
 base/16384/33136
复制

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论