.h 文件(如 pg_force_view.h)服务于编译时的 C 语言环境。它的核心作用是:

  • 定义内存布局 (struct): 它定义了当 PostgreSQL 后端进程从磁盘读取一行数据到内存后,这行数据在内存中应该如何组织。struct FormData_pg_force_view 就是这个内存布局的精确描述,它告诉 C 编译器每个字段是什么类型(Oid, char, text*)以及它们的顺序。

  • 提供类型安全: 定义了 Form_pg_force_view 这个指针类型,让 C 代码在访问表数据时有类型检查,增加了代码的健壮性。

  • 声明常量和 OID: 它通过宏(#define)和 CATALOG 宏参数,向 C 语言代码暴露了这张表、它的索引、以及列的 OID。这使得 C 代码可以通过这些易于理解的常量名(如 ForceViewRelationId)来引用它们,而不是硬编码数字。

简而言之,.h 文件是 PostgreSQL 后端程序(postgres)在运行时理解和操作这个表的数据结构的基础

  1. .dat 文件:

.dat 文件(如 pg_force_view.dat)主要服务于 PostgreSQL 的构建和初始化 (initdb) 过程。它的核心作用是:

  • 定义 SQL 和物理结构: 它用一种元数据格式描述了这张表在数据库中的“SQL 层面”的属性。它定义了列的 SQL 名称(fvoid, ident_case)、SQL 数据类型(通过 atttypid 间接定义)、约束(如 attnotnull)等。

  • 指挥 initdb: 构建脚本 genbki.pl 会读取 .dat 文件,并生成一个 .bki 文件。initdb 在引导模式下执行这个 .bki 文件里的指令,从而在数据库物理文件中真正地 CREATE TABLE,并创建索引。

  • 提供初始数据 (如果是数据文件): 对于像 pg_class.dat 这样的文件,它还提供了必须在数据库创建之初就存在的初始行。

  • 自动化生成代码: 它的 MAKE_SYSCACHE 宏会触发 genbki.pl 自动生成 C 代码(更新 syscache.hsyscache.c),将 SQL 世界的索引与 C 语言世界的缓存机制关联起来。

简而言之,.dat 文件是创建数据库集群时,用来在磁盘上构建这张表的物理和逻辑结构的指令集。没有它,initdb 就不知道要创建这样一张表。

特性 .h 文件 (头文件) .dat 文件 服务对象 C 编译器、PostgreSQL 后端进程 genbki.pl 脚本、initdb 命令 描述层面 内存中的数据结构 (C struct) 磁盘上的表结构 (SQL Schema) 生命周期 编译时 (Compile-time) 构建与初始化时 (Build/Init-time) 核心内容 C 类型定义、常量、OID 声明 表/列属性、索引、初始数据、Syscache 定义 最终产物 被编译进 postgres 可执行文件 驱动 initdb 创建物理表,并触发 C 代码生成 简单说 程序怎么“用”这个表 数据库怎么“建”这个表