您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > PostgreSQL--内核分析--逻辑备份还原
PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第1页/共24页PostgreSQL逻辑备份还原作者:李海翔博客:邮箱:lhx3000@163.com1(一)文件介绍..........................................................................................................................22(二)体系结构..........................................................................................................................33(三)导出文件的格式与函数指针的使用...............................................................................84(四)pg_backup_custom.c文件的导出格式研究..................................................................115(五)文件格式与备份恢复的关系---版本.............................................................................146(六)流的应用........................................................................................................................147(七)逻辑恢复........................................................................................................................158(八)逻辑备份恢复中的技巧与小结.....................................................................................169(九)详解逻辑备份---对象定义的导出(一).....................................................................1710(十)详解逻辑备份---对象定义的导出(二).............................................................1811(十一)详解逻辑备份---数据的导出.....................................................................................1912(十二)详解逻辑备份---大对象的导出.........................................................................22(一)文件介绍(二)体系结构(三)导出文件的格式与函数指针的使用(四)pg_backup_custom.c文件的导出格式研究(五)文件格式与备份恢复的关系---版本(六)流的应用(七)逻辑恢复(八)逻辑备份恢复中的技巧与小结(九)详解逻辑备份---对象定义的导出(一)(十)详解逻辑备份---对象定义的导出(二)(十一)详解逻辑备份---数据的导出PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第2页/共24页(十二)详解逻辑备份---大对象的导出(一)文件介绍在PostgreSQL的“src/bin/dump”目录下,存放了如下文件:Makefilenls.mkpg_backup_db.hpg_dump.hREADMEpg_backup.hpg_backup_files.cpg_dump_sort.ccommon.cpg_backup_archiver.cpg_backup_null.cpg_dumpall.cdumputils.cpg_backup_archiver.hpg_backup_tar.cpg_restore.cdumputils.hpg_backup_custom.cpg_backup_tar.hpokeywords.cpg_backup_db.cpg_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:导出对象存储到指定的文件中。PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第3页/共24页pg_backup_null.c:导出文件到标准输出。pg_backup_tar.c:以压缩文件的格式导出文件。第五类:导出算法支持类common.c:读出导出部分对象的功能。pg_dump_sort.c:对于导出对象,进行逻辑上的前后次序排序,决定先导出的对象,后导出的对象,可能在逻辑上依赖于先前导出的对象。第六类:导入类(逻辑还原)pg_restore.c:读备份文件,还原数据库对象和数据到指定数据库导入导出工具的基本原理:1导出工具连接目标数据库,读出要导出的对象的定义和数据(读出用户自定义的对象,系统的对象不导出),以及其他一些信息(如comment、权限)等,对于对象的定义,生成SQL语句;对于对象的数据,生成Insert语句(PostgreSQL对于数据的导出,还提供一种基于自己特有功能的copy方式);把这些生成的SQL语句,置于备份文件中。2导入工具读取备份文件,即读出SQL语句,依次发到目的数据库中去执行SQL,执行完毕,导入成功;执行失败,导入工具提示失败信息。2(二)体系结构1导出程序的流程pg_dump.c文件的main函数,主要完成如下工作:1.1解析命令行参数1.2判断参数间是否相容(不相容则报错退出,如参数指定了“只导出数据+只导出模式对象”,则逻辑不相容,报错退出)1.3用CreateArchive函数,打开输出文件,输出流为g_fout(即根据参数决定输出流的格式,用到了“第四类:导出文件格式类”的其一代码。本段评注:PostgreSQL导出工具精妙之一,用四个文件封装了四种不同的文件格式,增加新文件,可以增加新的导出文件类型;各自封装,独立易维护,有点OO的味道--多态)1.4g_fout,一个重要的全局变量,等到讲述“2导出程序的数据结构”时细述1.5使用ConnectDatabase函数,连接目的数据库1.6在数据库连接上,执行一些SQL,如设定C/S之间的编码、设定数据库对于日期类型的使用格式、针对不同版本的服务器设置一些与版本相关的信息1.7开启一个事务(重要设置,保证读出的数据一致性)do_sql_command(g_conn,BEGIN);PostgreSQL数据库---内核源码分析那海蓝蓝:生活点滴,随风拂去第4页/共24页do_sql_command(g_conn,SETTRANSACTIONISOLATIONLEVELSERIALIZABLE);1.8再次根据服务器的版本号决定一些变量的取值(因为有版本号的识别,保持了pg_dump工具向低版本兼容)1.9对指定模式、指定表导出做计算,收集需要导出、不需要导出的模式、表的信息1.10调用getSchemaData函数,决定导出哪些数据库对象(PostgreSQL的数据库对象是隶属于“模式schema”的),本函数又调用了如下函数,从上到下的调用次序,值得关注,在此,不完全决定了对象的导出次序,原则是,被依赖的对象,先导出。proclanginfo=getProcLangs(&numProcLangs);agginfo=getAggregates(&numAggregates);oprinfo=getOperators(&numOperators);oprinfoindex=buildIndexArray(oprinfo,numOperators,sizeof(OprInfo));opcinfo=getOpclasses(&numOpclasses);prsinfo=getTSParsers(&numTSParsers);tmplinfo=getTSTemplates(&numTSTemplates);dictinfo=getTSDictionaries(&numTSDicts);cfginfo=getTSConfigurations(&numT
本文标题:PostgreSQL--内核分析--逻辑备份还原
链接地址:https://www.777doc.com/doc-5509340 .html