Talk:Pgkernel

From PostgreSQL wiki

Jump to: navigation, search

任何一个数据库系统,通常都会提供逻辑导入导出工具。如Oracle的exp/imp。PostgreSQL,开源数据库的典范之作,其架构设计之精巧,堪称典范。

本文拟分如下部分,从源码角度(基于postgresql-9.1alpha2),逐步剖析其精巧的架构。

(一)文件介绍 在PostgreSQL的“src/bin/dump”目录下,存放了如下文件: Makefile nls.mk pg_backup_db.h pg_dump.h README pg_backup.h pg_backup_files.c pg_dump_sort.c common.c pg_backup_archiver.c pg_backup_null.c pg_dumpall.c dumputils.c pg_backup_archiver.h pg_backup_tar.c pg_restore.c dumputils.h pg_backup_custom.c pg_backup_tar.h po keywords.c pg_backup_db.c pg_dump.c

其中,文件可以分为如下类型(头

文件忽略,只介绍.c文件):

第一类:全系统导出文件 pg_dumpall.c: 导出所有的数据库。PostgreSQL是一个多库结构的数据库系统,其基本模型为:全系统->多个数据单库->每个数据库下多个模式(schema)->隶属模式的对象,如表、视图等。本文件就是导出全系统中的所有数据单库。Oracle是一个实例,只可以有一个数据单库,而PostgreSQL则是一个RDBMS下有多个单库。

第二类:导出单个数据库 pg_dump.c:导出单个数据库。被pg_dumpall.c循环调用,就可导出所有的数据单库。

第三类:导出单个数据库的辅助类 pg_backup_db.c:基本的辅助类,连接数据库系统、发送SQL语句等的类的封装。导入导出程序的基本原理是:连接目标数据库,读出要导出的对象的定义和数据,以及其他一些信息(如comment、权限)等。 dumputils.c:对字符串等做处理,还有对于对象权限信息导出的封装(buildACLCommands函数)。 keywords.c:引入PostGreSQL的关键字

第四类:导出文件格式类 pg_backup_custom.c:导出对象存储到二进制格式的文件中。 pg_backup_files.c:导出对象存储到指定的文件中。 pg_backup_null.c:导出文件到标准输出。 pg_backup_tar.c:以压缩文件的格式导出文件。

第五类:导出算法支持类 common.c:读出导出部分对象的功能。 pg_dump_sort.c:对于导出对象,进行逻辑上的前后次序排序,决定先导出的对象,后导出的对象,可能在逻辑上依赖于先前导出的对象。

第六类:导入类(逻辑还原) pg_restore.c:读备份文件,还原数据库对象和数据到指定数据库

Personal tools