一.背景
在Greenplum · 源碼閱讀 · gpbackup的DoSetup源碼分析一文中介紹了備份的準(zhǔn)備操作,接下來就是數(shù)據(jù)備份喘先,包括元數(shù)據(jù)和用戶數(shù)據(jù)泊碑。元數(shù)據(jù)的備份包含全局?jǐn)?shù)據(jù)缕溉、predata和postdata的備份死陆。本文主要分析backupPredata函數(shù)。
二.backupPredata函數(shù)
該函數(shù)步驟比較多其屏,包括外部表協(xié)議喇勋、擴(kuò)展、存儲(chǔ)過程偎行、語(yǔ)言川背、類型等。
1.函數(shù)位置
func backupPredata(metadataFile *utils.FileWithByteCount, tables []Table, tableOnly bool)位于
backup.go文件中蛤袒。
2.函數(shù)流程說明
輔助說明如下:
1)retrieveFunctions
查詢存儲(chǔ)過程熄云,表名pg_proc,查詢信息的時(shí)候會(huì)和pg_description以及pg_shdescription做左連接,查出proc完整信息妙真。
proc采用的語(yǔ)言定義存放于pg_language,如internal,c缴允,sql,plpgsql,plpythonu等。
更多信息參考:https://gpdb.docs.pivotal.io/6-10/ref_guide/system_catalogs/pg_description.html
2)retrieveProtocols
查詢外部協(xié)議珍德,表名pg_extprotocol,如創(chuàng)建pxf外部協(xié)議练般,通過CREATE EXTENSION pxf;就會(huì)在該表中增加一條記錄。
DROP EXTENSION pxf;刪除外部協(xié)議锈候。gphdfs和pxf等屬于用戶自定義協(xié)議薄料;file、gpfdist泵琳、gpfdists屬于內(nèi)部協(xié)議摄职,不屬于此范圍。
更多信息參考:https://gpdb.docs.pivotal.io/6-10/admin_guide/external/g-external-tables.html
3)backupSchemas
備份Schema信息获列。
4)backupExtensions
備份擴(kuò)展信息琳钉,表名pg_extension,查詢會(huì)顯示如plpqsql蛛倦、pxf等。
5)backupCollations
備份排序規(guī)則啦桌,表名pg_collation溯壶,描述可用排序規(guī)則及皂,本質(zhì)是一個(gè)SQL名字到操作系統(tǒng)local分類的映射,如order by中的排序規(guī)則且改。
更多信息參考:http://www.postgres.cn/docs/9.6/catalog-pg-collation.html
6)retrieveAndBackupTypes
備份類型验烧,表名pg_type,通過typtype分別讀取又跛,然后一起備份碍拆。typtype包括b:基礎(chǔ)類型、c:組合類型慨蓝、d:領(lǐng)域感混、e:枚舉、p:pseduo類型礼烈、r:范圍類型弧满。
更多信息參考:https://gpdb.docs.pivotal.io/6-10/ref_guide/system_catalogs/pg_type.html
7)backupProceduralLanguages
備份語(yǔ)言,表名:pg_language此熬,該備份會(huì)涉及表pg_seclabel(安全標(biāo)簽)和pg_shseclabel. 安全標(biāo)簽命令SECURITY LABEL庭呜。
更多信息參考:http://www.postgres.cn/docs/9.6/view-pg-seclabels.html
8)retrieveFDWObjects
查詢外部數(shù)據(jù)包裹對(duì)象,涉及的表pg_foreign_data_wrapper(獲取外部數(shù)據(jù)wrapper的定義)犀忱、pg_foreign_server募谎、pg_user_mappings(用于用戶和server的接入權(quán)限管理)。
9)retrieveTSObjects
查詢文本搜索對(duì)象阴汇,涉及的表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
查詢約束關(guān)系,表名pg_constraint芽突,涉及pg_class试浙、pg_partition,如分區(qū)的約束寞蚌。
17)backupDependentObjects
備份依賴對(duì)象田巴,表名pg_depend钠糊,涉及的表pg_extable、pg_partition壹哺、pg_tablespace抄伍、pg_class。
18)backupConversions
表名pg_conversion管宵,保存編碼轉(zhuǎn)換信息截珍,如iso_8859_1_to_utf8。
19)backupConstraints
保存約束信息到文件箩朴。
3.設(shè)計(jì)模式
?在獲取元數(shù)據(jù)對(duì)象信息采用了表驅(qū)動(dòng)的模式岗喉,抽取共性:從數(shù)據(jù)庫(kù)獲取多種對(duì)象,結(jié)果為ObjectMetaMap,方便代碼的擴(kuò)展和維護(hù)隧饼∩虮ぃ控制函數(shù)為GetMetadataForObjectType。
三燕雁、相關(guān)文章
1.Greenplum · 源碼閱讀 · gpbackup的參數(shù)檢查源碼分析
2.Greenplum · 源碼閱讀 · gpbackup的DoSetup源碼分析