1 可仔细体会文件如何存放数据
2 可体会文件头中和版本有关的信息(文件版本,程序版本)
|
基本部分 |
结构 |
备注 |
|
文件头 |
dump标识 |
5个字符= PGDMP |
|
文件版本标识 |
3个char=vmaj | vmin | vrev version = ((vmaj * 256 + vmin) * 256 + vrev) * 256 + 0; version:最终得出的文件版本,int型 | |
|
“integer”的长度 |
1个byte=4 | |
|
偏移数值的长度 |
1个byte=4 | |
|
备份文件的格式 |
1个byte=4 | |
|
压缩级别 |
根据文件版本确定:1个byte或1个int | |
|
创建时间 |
7个int=xxx | |
|
数据库名 |
字符串=len+data=int+byte[] | |
|
服务器的版本 |
字符串 | |
|
程序的版本 |
字符串 | |
|
可导出对象元信息链 |
toc count |
int = 4,toc链上元素的个数 |
|
dumpID |
int = 4 | |
|
dataDumper |
int * = 4,函数指针 | |
|
tableoid |
字符串 | |
|
OID |
字符串 | |
|
tag |
字符串,对象名(对象是表,即表名) | |
|
desc |
字符串,对象类型(对象是表,即“TABLE”) | |
|
defn |
字符串,对象的create SQL语句 | |
|
dropStmt |
字符串,对象的drop SQL语句 | |
|
copyStmt |
字符串,对象的drop SQL语句 | |
|
namespace |
字符串,对象所属的schema | |
|
tablespace |
字符串,对象所在的tablespace | |
|
owner |
字符串,对象所有者 | |
|
withOids |
字符串,对象是否有oid,只有“true”和“false”值 | |
|
dependencies |
字符串list,对象的依赖关系 | |
|
NULL |
结束标志 | |
|
数据块 |
有两种类型:
|
三个标志:byte BLK_DATA:表数据的标识 BLK_BLOB:没有被使用 BLK_BLOBS:所有大对象的数据块 |
|
|
普通数据 |
基本结构 ::= BLK_DATA | dumpId |data | 0 BLK_DATA ::= 1 byte dumpId::= int4 data ::= copyState / insertStates copyState ::= chunkLen | chunkBytes| … | chunkLen | chunkBytes | . | \n | \n | \n insertStates ::= insert SQL statement | ; | \n | … | insert SQL statement | ; | \n | \n | \n
|
|
大对象块 |
基本结构 ::= BLK_BLOBS | dumpId | one LOB | … | one LOB | 0 BLK_BLOBS ::= 1 byte dumpId::= int4 one LOB ::= OID | chunkLen | chunkBytes| …. | chunkLen | chunkBytes | 0 OID ::= int4 chunkLen ::= int4 chunkBytes ::= n byte 1) BLK_BLOBS:大对象的标志,以byte格式写出 2) dumpId:可导出对象的一个统一导出编号,以int格式写出 3) oid:大对象的oid,以int格式写出 4) [数据长度/数据块]:可以有多个,“[”和“]”符号表示可选;长度以int格式写出; 5) 0:标识结束
|
Byte格式: 单字符 (调用fputc输出)
Int格式:符号位 | 字节1 | 字节2… (最低位优先的字节序列)
本文详细解析了pg_backup_custom.c文件的结构与导出方式,包括文件头信息、版本标识、备份文件格式、压缩级别、创建时间等关键信息。文章深入探讨了文件的组成部分及意义,提供了对文件导出流程的理解。
955

被折叠的 条评论
为什么被折叠?



