Greenplum · 源码阅读 · gpbackup的back

作者: sinwaj | 来源:发表于2020-08-16 11:25 被阅读0次

一.背景

Greenplum · 源码阅读 · gpbackup的DoSetup源码分析一文中介绍了备份的准备操作,接下来就是数据备份,包括元数据和用户数据。元数据的备份包含全局数据、predata和postdata的备份。本文主要分析backupPredata函数。

二.backupPredata函数

该函数步骤比较多,包括外部表协议、扩展、存储过程、语言、类型等。

1.函数位置

func backupPredata(metadataFile *utils.FileWithByteCount, tables []Table, tableOnly bool)位于

backup.go文件中。

2.函数流程说明

图1 处理流程

辅助说明如下:

1)retrieveFunctions

查询存储过程,表名pg_proc,查询信息的时候会和pg_description以及pg_shdescription做左连接,查出proc完整信息。

proc采用的语言定义存放于pg_language,如internal,c,sql,plpgsql,plpythonu等。

更多信息参考:https://gpdb.docs.pivotal.io/6-10/ref_guide/system_catalogs/pg_description.html

2)retrieveProtocols

查询外部协议,表名pg_extprotocol,如创建pxf外部协议,通过CREATE EXTENSION pxf;就会在该表中增加一条记录。

DROP EXTENSION pxf;删除外部协议。gphdfs和pxf等属于用户自定义协议;file、gpfdist、gpfdists属于内部协议,不属于此范围。

更多信息参考:https://gpdb.docs.pivotal.io/6-10/admin_guide/external/g-external-tables.html

3)backupSchemas

备份Schema信息。

4)backupExtensions

备份扩展信息,表名pg_extension,查询会显示如plpqsql、pxf等。

5)backupCollations

备份排序规则,表名pg_collation,描述可用排序规则,本质是一个SQL名字到操作系统local分类的映射,如order by中的排序规则。

更多信息参考:http://www.postgres.cn/docs/9.6/catalog-pg-collation.html

6)retrieveAndBackupTypes

备份类型,表名pg_type,通过typtype分别读取,然后一起备份。typtype包括b:基础类型、c:组合类型、d:领域、e:枚举、p:pseduo类型、r:范围类型。

更多信息参考:https://gpdb.docs.pivotal.io/6-10/ref_guide/system_catalogs/pg_type.html

7)backupProceduralLanguages

备份语言,表名:pg_language,该备份会涉及表pg_seclabel(安全标签)和pg_shseclabel. 安全标签命令SECURITY LABEL。

更多信息参考:http://www.postgres.cn/docs/9.6/view-pg-seclabels.html

8)retrieveFDWObjects

查询外部数据包裹对象,涉及的表pg_foreign_data_wrapper(获取外部数据wrapper的定义)、pg_foreign_server、pg_user_mappings(用于用户和server的接入权限管理)。

9)retrieveTSObjects

查询文本搜索对象,涉及的表pg_ts_parser、pg_ts_config、pg_ts_template、pg_ts_dict。

更多信息参考:http://www.postgres.cn/docs/9.6/catalog-pg-ts-parser.html

10)backupOperatorFamilies

备份操作符族,涉及的表pg_opfamily。

11)retrieveOperatorObjects

涉及的表pg_operator、pg_opclass。

12)retrieveAggregates

表名pg_aggregate。

13)retrieveCasts

表名pg_cast。

14)retrieveViews

表名pg_class。

15)retrieveAndBackupSequences

表名pg_class,类型relkind='S'。

16)retrieveConstraints

查询约束关系,表名pg_constraint,涉及pg_class、pg_partition,如分区的约束。

17)backupDependentObjects

备份依赖对象,表名pg_depend,涉及的表pg_extable、pg_partition、pg_tablespace、pg_class。

18)backupConversions

表名pg_conversion,保存编码转换信息,如iso_8859_1_to_utf8。

19)backupConstraints

保存约束信息到文件。

3.设计模式

 在获取元数据对象信息采用了表驱动的模式,抽取共性:从数据库获取多种对象,结果为ObjectMetaMap,方便代码的扩展和维护。控制函数为GetMetadataForObjectType。

图2 表驱动模式

三、相关文章

1.Greenplum · 源码阅读 · gpbackup的参数检查源码分析

2.Greenplum · 源码阅读 · gpbackup的DoSetup源码分析

四、代码位置

https://github.com/greenplum-db/gpbackup/tree/master/backup

相关文章

网友评论

    本文标题:Greenplum · 源码阅读 · gpbackup的back

    本文链接:https://www.haomeiwen.com/subject/aenndktx.html