您的位置:首页 > 数据库 > SQL

PostgreSQL之精妙的数据库导入导出工具架构 (四)

2011-12-02 19:52 501 查看
(四)pg_backup_custom.c文件的导出格式研究

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…
(最低位优先的字节序列)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: