一.背景
在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源码分析
网友评论