云服务器内容精选

  • 使用示例 以当前两个用户自建的数据库db1、db2为例: 在CN上获取集群的所有残留文件记录: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的 当前集群中: dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。 残留文件在residualfile 列展示。 filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。 调用pgxc_verify_residualfiles() 函数对db1库进行验证: 1 db1=# SELECT * FROM pgxc_verify_residualfiles(); 因为verify类函数都是database级别,所以当前在db1库中调用verify函数时,只对属于db1的残留文件进行验证。 可以再次调用get函数查看是否验证完成: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; 如上图所示,已确认db1数据库中的残留文件都已经验证,db2数据库中的残留文件都未进行验证。 调用 pgxc_rm_residualfiles()函数删除残留文件。 1 db1=# SELECT * FROM pgxc_rm_residualfiles(); 再次调用pgxc_get_residualfiles()函数检查删除后的结果。 结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。 同时可以看到查询出9条结果,与之前查询出的结果相比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中: 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。 进入db2数据库,并调用验证函数: 此时可以查询验证的结果: 调用删除函数: 再查询删除的结果: 此时因为 8342 结尾的记录文件中残留文件已经全部删除,所以整个记录文件也被删除并备份到backup目录下,所以查询到0条记录。
  • 使用步骤 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。 pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。
  • 使用示例 以当前两个用户自建的数据库db1、db2为例: 在CN上获取集群的所有残留文件记录: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; -- order by不是必须的 当前集群中: dn_6001_6002 节点(当前的主节点实例)的db1和db2数据库中都存在残留文件记录。 残留文件在residualfile列展示。 filepath列为记录残留文件的记录文件,保存在实例数据目录下pg_residualfiles目录中。 调用pgxc_verify_residualfiles()函数对db1库进行验证: 1 db1=# SELECT * FROM pgxc_verify_residualfiles(); 因为verify类函数都是database级别,所以当前在db1库中调用verify函数时,只对属于db1的残留文件进行验证。 可以再次调用get函数查看是否验证完成: 1 db1=# SELECT * FROM pgxc_get_residualfiles() order by 4, 6; 如上图所示,已确认db1数据库中的残留文件都已经验证,db2数据库中的残留文件都未进行验证。 调用pgxc_rm_residualfiles()函数删除残留文件。 1 db1=# SELECT * FROM pgxc_rm_residualfiles(); 再次调用pgxc_get_residualfiles()函数检查删除后的结果。 结果显示db1数据库中的残留文件已经被删除(isdeleted标记为t),db2中的残留文件都未被删除。 同时可以看到查询出9条结果,与之前查询出的结果想比,缺少一条以9438结尾的残留文件记录文件。这是因为以9438结尾的残留文件记录文件中只有一条残留文件记录,这条记录在步骤3中被删除,当记录文件中的所有残留文件都被删除后,记录文件本身也会被删除,并备份到pg_residualfiles/backup目录中: 如果需要删除db2数据库中的文件,需要在db2中调用verify函数后再调用rm函数。 进入db2数据库,并调用验证函数: 此时可以查询验证的结果: 调用删除函数: 再查询删除的结果: 此时因为8342结尾的记录文件中残留文件已经全部删除,所以整个记录文件也被删除并备份到backup目录下,所以查询到0条记录。
  • 使用步骤 调用pgxc_get_residualfiles()函数,获取存在残留文件的数据库名称。 分别进入确认有残留文件的数据库,调用pgxc_verify_residualfiles()函数,对当前数据库中记录的残留文件进行验证。 调用pgxc_rm_residualfiles()函数,删除所有已经验证过的残留文件。 pgxc类残留文件管理函数只对CN和当前主DN进行操作,不会验证和清理备DN上的残留文件。所以主DN完成清理后,应在备DN上及时执行残留文件清理操作或对备机进行build,防止主备切换后由于增量build导致备机残留文件被重新复制回主DN,导致未成功清理的假象。
  • 响应示例 状态码: 200 对应分片的上传信息 { "multiParts" : [ { "partNumber" : 46, "partSize" : 10485760, "partOffset" : 471859200, "hashCtx" : [ 1748048713, 2644528514, 4267727253, 2252747490, 4036182088, 2253856463, 526139147, 2194267752 ], "uploadUrl" : "https://b10-obs-ykj-uat-01.obs.cidc-rp-2006.joint.cmecloud.cn/4e8108ee15fa471cbe5f18f03e8b555b086?partNumber=46&uploadId=0000019039E1E8520006EBE63B492EDB&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240621T082041Z&X-Amz-SignedHeaders=content-length%3Bhost&X-Amz-Expires=3600&X-Amz-Credential=MKRISPBZAJWFHNBJ5WLB%2F20240621%2Fcidc-rp-2006%2Fs3%2Faws4_request&X-Amz-Iteration-Hash-Ctx=eyJtZF9sZW4iOjMyLCJudW0iOjAsImgiOlsxNzQ4MDQ4NzEzLDI2NDQ1Mjg1MTQsNDI2NzcyNzI1MywyMjUyNzQ3NDkwLDQwMzYxODIwODgsMjI1Mzg1NjQ2Myw1MjYxMzkxNDcsMjE5NDI2Nzc1Ml0sIm5oIjowLCJubCI6Mzc3NDg3MzYwMCwiaGFzaF90eXBlIjoic2hhMjU2In0%3D&X-Amz-Signature=d3e7f60f45c8fd3960e697c57bb7d1c386dd20940b860fd976ba77425767d65e" }, { "partNumber" : 47, "partSize" : 10485760, "partOffset" : 482344960, "hashCtx" : [ 1606212, 1743131457, 2392241618, 605997363, 3054356113, 673008609, 3509469858, 2186398707 ], "uploadUrl" : "https://b10-obs-ykj-uat-01.obs.cidc-rp-2006.joint.cmecloud.cn/4e8108ee15fa471cbe5f18f03e8b555b086?partNumber=47&uploadId=0000019039E1E8520006EBE63B492EDB&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240621T082041Z&X-Amz-SignedHeaders=content-length%3Bhost&X-Amz-Expires=3600&X-Amz-Credential=MKRISPBZAJWFHNBJ5WLB%2F20240621%2Fcidc-rp-2006%2Fs3%2Faws4_request&X-Amz-Iteration-Hash-Ctx=eyJtZF9sZW4iOjMyLCJudW0iOjAsImgiOlsxNjA2MjEyLDE3NDMxMzE0NTcsMjM5MjI0MTYxOCw2MDU5OTczNjMsMzA1NDM1NjExMyw2NzMwMDg2MDksMzUwOTQ2OTg1OCwyMTg2Mzk4NzA3XSwibmgiOjAsIm5sIjozODU4NzU5NjgwLCJoYXNoX3R5cGUiOiJzaGEyNTYifQ%3D%3D&X-Amz-Signature=38980d3be00e528ee11c366ae69e950d673528203f3869a26f39dae42b4dabbb" }, { "partNumber" : 48, "partSize" : 10485760, "partOffset" : 492830720, "hashCtx" : [ 3734586607, 1407828785, 3243195625, 3451635323, 4031416500, 3005674269, 2829389145, 3478923465 ], "uploadUrl" : "https://b10-obs-ykj-uat-01.obs.cidc-rp-2006.joint.cmecloud.cn/4e8108ee15fa471cbe5f18f03e8b555b086?partNumber=48&uploadId=0000019039E1E8520006EBE63B492EDB&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240621T082041Z&X-Amz-SignedHeaders=content-length%3Bhost&X-Amz-Expires=3600&X-Amz-Credential=MKRISPBZAJWFHNBJ5WLB%2F20240621%2Fcidc-rp-2006%2Fs3%2Faws4_request&X-Amz-Iteration-Hash-Ctx=eyJtZF9sZW4iOjMyLCJudW0iOjAsImgiOlszNzM0NTg2NjA3LDE0MDc4Mjg3ODUsMzI0MzE5NTYyNSwzNDUxNjM1MzIzLDQwMzE0MTY1MDAsMzAwNTY3NDI2OSwyODI5Mzg5MTQ1LDM0Nzg5MjM0NjVdLCJuaCI6MCwibmwiOjM5NDI2NDU3NjAsImhhc2hfdHlwZSI6InNoYTI1NiJ9&X-Amz-Signature=d5608f38d6afdfee117be1243870b63f46ff11676633e0630d122f0c4145e8ae" }, { "partNumber" : 49, "partSize" : 10485760, "partOffset" : 503316480, "hashCtx" : [ 3677016828, 906610338, 3389225168, 2507561547, 1134075905, 3951513567, 1673174790, 3034719756 ], "uploadUrl" : "https://b10-obs-ykj-uat-01.obs.cidc-rp-2006.joint.cmecloud.cn/4e8108ee15fa471cbe5f18f03e8b555b086?partNumber=49&uploadId=0000019039E1E8520006EBE63B492EDB&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240621T082041Z&X-Amz-SignedHeaders=content-length%3Bhost&X-Amz-Expires=3600&X-Amz-Credential=MKRISPBZAJWFHNBJ5WLB%2F20240621%2Fcidc-rp-2006%2Fs3%2Faws4_request&X-Amz-Iteration-Hash-Ctx=eyJtZF9sZW4iOjMyLCJudW0iOjAsImgiOlszNjc3MDE2ODI4LDkwNjYxMDMzOCwzMzg5MjI1MTY4LDI1MDc1NjE1NDcsMTEzNDA3NTkwNSwzOTUxNTEzNTY3LDE2NzMxNzQ3OTAsMzAzNDcxOTc1Nl0sIm5oIjowLCJubCI6NDAyNjUzMTg0MCwiaGFzaF90eXBlIjoic2hhMjU2In0%3D&X-Amz-Signature=52eb71278fc9310f13a5b92641b5a726d0006be8dd89a242f9c4ce09c360e1f7" }, { "partNumber" : 50, "partSize" : 10485760, "partOffset" : 513802240, "hashCtx" : [ 1827691250, 2956926651, 1801460777, 4119662276, 4162375117, 187866976, 1789369655, 278284511 ], "uploadUrl" : "https://b10-obs-ykj-uat-01.obs.cidc-rp-2006.joint.cmecloud.cn/4e8108ee15fa471cbe5f18f03e8b555b086?partNumber=50&uploadId=0000019039E1E8520006EBE63B492EDB&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20240621T082041Z&X-Amz-SignedHeaders=content-length%3Bhost&X-Amz-Expires=3600&X-Amz-Credential=MKRISPBZAJWFHNBJ5WLB%2F20240621%2Fcidc-rp-2006%2Fs3%2Faws4_request&X-Amz-Iteration-Hash-Ctx=eyJtZF9sZW4iOjMyLCJudW0iOjAsImgiOlsxODI3NjkxMjUwLDI5NTY5MjY2NTEsMTgwMTQ2MDc3Nyw0MTE5NjYyMjc2LDQxNjIzNzUxMTcsMTg3ODY2OTc2LDE3ODkzNjk2NTUsMjc4Mjg0NTExXSwibmgiOjAsIm5sIjo0MTEwNDE3OTIwLCJoYXNoX3R5cGUiOiJzaGEyNTYifQ%3D%3D&X-Amz-Signature=154bcd4ad7774f20e196666d403bf3d4359dd151b9cb1cc1f604c6517c4a287b" } ], "code" : 0, "msg" : "成功" }
  • 请求示例 通过“分片上传”方式创建文件元数据,该示例指定了对应文件从46到50分片的分片,后续响应会返回对应分片的上传地址,需要将对应分片通过PUT请求上传对应的分片。 POST /koodrive/ose/v1/files/multipart/uploadUrl Authorization:Bearer+10f88*********4791e9ff { "fileId": "Fqo2kYHmsgWg5whxzYHZLL7mebXbBr1no", "multiParts": [ { "hashCtx": [ 1748048713, 2644528514, 4267727253, 2252747490, 4036182088, 2253856463, 526139147, 2194267752 ], "partNumber": 46, "partOffset": 471859200, "partSize": 10485760 }, { "hashCtx": [ 1606212, 1743131457, 2392241618, 605997363, 3054356113, 673008609, 3509469858, 2186398707 ], "partNumber": 47, "partOffset": 482344960, "partSize": 10485760 }, { "hashCtx": [ 3734586607, 1407828785, 3243195625, 3451635323, 4031416500, 3005674269, 2829389145, 3478923465 ], "partNumber": 48, "partOffset": 492830720, "partSize": 10485760 }, { "hashCtx": [ 3677016828, 906610338, 3389225168, 2507561547, 1134075905, 3951513567, 1673174790, 3034719756 ], "partNumber": 49, "partOffset": 503316480, "partSize": 10485760 }, { "hashCtx": [ 1827691250, 2956926651, 1801460777, 4119662276, 4162375117, 187866976, 1789369655, 278284511 ], "partNumber": 50, "partOffset": 513802240, "partSize": 10485760 } ] }
  • 请求参数 表1 请求Body参数 参数 是否必选 参数类型 描述 fileId 是 String 文件id multiParts 是 Array of MultiPartInfo objects 分片信息列表 表2 MultiPartInfo 参数 是否必选 参数类型 描述 partNumber 是 Integer 分片编号 partSize 是 Long 分片长度,取值范围[5242880, 5368709120],最后一个分片取值范围[0, 5368709120] minimum: 0 maximum: 5368709120 partOffset 否 Long 到上一个数据块为止的总长度,单位为字节,该字段仅在分片并行上传时有效,分片并行上传时,除最后一个分片外,分片并行上传的其它分片大小,必须是 64字节的倍数 hashCtx 否 Array of longs 用于迭代计算SHA256的上下文,该字段仅在分片并行上传时有效。对于SHA1,取值为上一个数据块SHA1的第1-5个32位变量。对于SHA256,取值为上一个数据块SHA256的第1-8个32位变量。 注:分片并行上传时除第一个分片外其他分片必填。 uploadUrl 否 String 文件上传的URL,返回参数 partId 否 String 分片对象ID
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 Authorization 是 String 该字段存储的是Access Token。调用KooDrive的API使用Token认证,拥有Token就代表拥有某种权限,在调用API的时候将Token加到请求消息头中,从而通过身份认证,获得操作API的权限。Access Token的获取请参考对应的开发手册,格式参考:Bearer+{access_token} X-Traceid 否 String 消息日志跟踪标识(必须58位) language 否 String 国际化语言标识,符合i18n规范,如zh-CN表示简体中文,en-US表示美式英语,不传默认美式英语
  • 响应示例 状态码: 200 全路径信息 { "fileIdPath" : "/DEUI7pa0C24ArootIAADfsBFCO6WtAtuA315074383680425b8aa9a130cba2d4/FkbdCAceMj89bprz5xLJASID1eaRqjlRP/FqIAmBlIz7ovbThxeUBlOpbnCHaP_MTUL/FqS6hLLy_DkjlWdfOnEdCErhsmokRvdXI", "namePath" : "/rootIAADfsBFCO6WtAtuA315074383680425b8aa9a130cba2d4/007/001/批量任务测试", "code" : 0, "msg" : "成功" }
  • pg_get_residualfiles() 描述:用于获取当前节点的所有残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 返回值类型:record 返回信息如下: 表1 pg_get_residualfiles()返回字段 名称 类型 描述 isverified bool 是否已经验证。 isdeleted bool 是否已经被删除。 dbname text 所属数据库名称。 residualfile text 数据文件路径。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 SELECT * FROM pg_get_residualfiles(); isverified | isdeleted | dbname | residualfile | filepath | notes ------------+-----------+--------+-------------------+---------------------------+------- f | f | db2 | base/49155/114691 | pgrf_20200908160211441546 | f | f | db2 | base/49155/114694 | pgrf_20200908160211441546 | f | f | db2 | base/49155/114696 | pgrf_20200908160211441546 | (3 rows)
  • pgxc_get_residualfiles() 描述:pg_get_residualfiles()的CN统一查询函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 返回值类型:record 返回信息如下: 表2 pgxc_get_residualfiles()返回字段 名称 类型 描述 nodename text 节点名称。 isverified bool 是否已经验证。 isdeleted bool 是否已经被删除。 dbname text 所属数据库名称。 residualfile text 数据文件路径。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 8 SELECT * FROM pgxc_get_residualfiles(); nodename | isverified | isdeleted | dbname | residualfile | filepath | notes --------------+------------+-----------+----------+-------------------+---------------------------+------- cn_5001 | f | f | postgres | base/15092/32803 | pgrf_20200910170129360401 | dn_6001_6002 | f | f | db2 | base/49155/114691 | pgrf_20200908160211441546 | dn_6001_6002 | f | f | db2 | base/49155/114694 | pgrf_20200908160211441546 | dn_6001_6002 | f | f | db2 | base/49155/114696 | pgrf_20200908160211441546 | (4 rows)
  • pgxc_get_residualfiles() 描述:pg_get_residualfiles()的CN统一查询函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表2 pgxc_get_residualfiles()返回字段 名称 类型 描述 nodename text 节点名称。 isverified bool 是否已经验证。 isdeleted bool 是否已经被删除。 dbname text 所属数据库名称。 residualfile text 数据文件路径。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 8 SELECT * FROM pgxc_get_residualfiles(); nodename | isverified | isdeleted | dbname | residualfile | filepath | notes --------------+------------+-----------+----------+-------------------+---------------------------+------- cn_5001 | f | f | postgres | base/15092/32803 | pgrf_20200910170129360401 | dn_6001_6002 | f | f | db2 | base/49155/114691 | pgrf_20200908160211441546 | dn_6001_6002 | f | f | db2 | base/49155/114694 | pgrf_20200908160211441546 | dn_6001_6002 | f | f | db2 | base/49155/114696 | pgrf_20200908160211441546 | (4 rows)
  • pg_get_residualfiles() 描述:用于获取当前节点的所有残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 参数类型:无 返回值类型:record 函数返回字段如下: 表1 pg_get_residualfiles()返回字段 名称 类型 描述 isverified bool 是否已经验证。 isdeleted bool 是否已经被删除。 dbname text 所属数据库名称。 residualfile text 数据文件路径。 filepath text 残留文件记录路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 SELECT * FROM pg_get_residualfiles(); isverified | isdeleted | dbname | residualfile | filepath | notes ------------+-----------+--------+-------------------+---------------------------+------- f | f | db2 | base/49155/114691 | pgrf_20200908160211441546 | f | f | db2 | base/49155/114694 | pgrf_20200908160211441546 | f | f | db2 | base/49155/114696 | pgrf_20200908160211441546 | (3 rows)
  • pg_rm_scan_residualfiles_archive() 描述:用于删除当前节点所有归档的残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。 返回类型:record 返回信息如下: 表7 返回字段 名称 类型 描述 count bigint 归档中已删除的残留文件数量。本地路径的残留文件统计所删除的文件数,OBS路径的残留文件统计所删除的表目录数量。 size bigint 归档中已删除的残留文件总大小,单位为byte。OBS路径的残留文件该项均为0。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_scan_residualfiles_archive(); count | size -------+------- 4 | 81920 (1 row)
  • pgxc_rm_scan_residualfiles_archive(query_flag) 描述:pg_rm_scan_residualfiles_archive()的CN统一执行函数。该函数为集群级函数,与当前所在的数据库无关,在CN实例上运行。 参数query_flag,参数类型int,用于表示执行范围。1表示CN,2表示主DN,4表示备DN,通过或运算可以得到查询并集,如1|2=3表示CN+主DN,1|2|4=7表示CN+主DN+备DN。默认值是7。 返回类型:record 返回信息如下: 表8 返回字段 名称 类型 描述 nodename name 节点名称。 instance_id text 实例名称。 count bigint 归档中已删除的残留文件数量。本地路径的残留文件统计所删除的文件数,OBS路径的残留文件统计所删除的表目录数量。 size bigint 归档中已删除的残留文件总大小,单位为byte。OBS路径的残留文件该项均为0。 示例: 1 2 3 4 5 6 7 8 SELECT * FROM pgxc_rm_scan_residualfiles_archive(); node_name | instance_id | count | size --------------+-------------+-------+------- dn_6001_6002 | dn_6001 | 4 | 81920 cn_5001 | cn_5001 | 1 | 40960 dn_6007_6008 | dn_6008 | 1 | 24576 coordinator1 | coordinator1| 1 | 0 (4 rows)