From 56187a640196f58715413749a9619fd7d715c875 Mon Sep 17 00:00:00 2001 From: wangrururu Date: Sat, 20 Aug 2022 22:32:58 +0800 Subject: [PATCH 1/2] add blog --- content/zh/post/wzr/wzr1.md | 56 ++++++++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/content/zh/post/wzr/wzr1.md b/content/zh/post/wzr/wzr1.md index eb2968e0..1abdb545 100644 --- a/content/zh/post/wzr/wzr1.md +++ b/content/zh/post/wzr/wzr1.md @@ -1 +1,55 @@ -**+++**
**title="openGauss社区入门(opengauss-逻辑备份命令)"**
**date="2022-08-19"**
**tags=["openGauss社区开发入门"]**
**archives=“2022-08”**
**author=“wangrururu”**
**summary="openGauss社区开发入门"**
**img="/zh/post/wzr/title/title.jpg"**
**times="19:15"**
**+++**
openGauss支持使用gs_dump工具导出表级的内容,包含表定义和表数据。视图、序列和外表属于特殊的表。用户可通过灵活的自定义方式导出表内容,不仅支持选定一个表或多个表的导出,还支持排除一个表或者多个表的导出。可根据需要自定义导出如下信息:
•导出表全量信息,包含表数据和表定义。
•仅导出数据,不包含表定义。
•仅导出表定义。
1.常用参数
(1)-U 连接数据库的用户名。
(2)-W 指定用户连接的密码。
(3)-f 将导出文件发送至指定目录文件夹。如果这里省略,则使用标准输出。
(4)-p 指定服务器所侦听的TCP端口或本地Unix域套接字后缀,以确保连接。
(5)dbname 需要导出的数据库名称。
(6)-t 指定导出的表(或视图、序列、外表),可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。
(7)-F 选择导出文件格式。-F参数值如下:
•p:纯文本格式
•c:自定义归档
•d:目录归档格式
•t:tar归档格式
(8)-T 不转储的表(或视图、或序列、或外表)对象列表,可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。
2.示例
(1)导出表的定义和数据,导出文件格式为文本格式。
gs_dump -f /home/opengauss300_0708/backup/m.sql -p 3436 postgres -t dd1 -F p
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908148094-ccb6939f-cffd-4b41-9440-454eaf8361d6.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=43&id=u6997755e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=54&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=65145&status=done&style=none&taskId=u74d1d0f3-090f-4bfd-bca1-dab80f3922d&title=&width=443.2)
(2)只导出表的数据,导出文件格式为tar归档格式。
gs_dump -f /home/opengauss300_0708/backup/m.tar -p 3436 postgres -t dd1 -a -F t
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908162097-b217e7c4-7e67-49b1-98c8-69f796b746b8.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=27&id=u43cdc23b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=34&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=37232&status=done&style=none&taskId=u88ffe901-057c-4233-bfe7-476253371a8&title=&width=443.2)
(3)导出表的定义,导出文件格式为目录归档格式。
gs_dump -f /home/opengauss300_0708/backup/m -p 3436 postgres -t dd1 -s -F d
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908175403-885cce65-9c45-4b9f-a81d-1915d84fa625.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=44&id=ub7383955&margin=%5Bobject%20Object%5D&name=image.png&originHeight=55&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=64834&status=done&style=none&taskId=u1730ce70-058a-46b9-a0ee-6f957e076ce&title=&width=443.2)
(4)不导出表,导出文件格式为自定义归档格式。
gs_dump -f /home/opengauss300_0708/backup/m.dmp -p 3436 postgres -T dd1 -F c
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908186579-1a0bc9e4-bc4f-4b11-b61b-99f9643bebc1.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=44&id=u37964949&margin=%5Bobject%20Object%5D&name=image.png&originHeight=55&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=65317&status=done&style=none&taskId=u86606486-7061-4325-b722-5facd291159&title=&width=443.2)
(5)同时导出两个表,导出文件格式为文本格式。
gs_dump -f /home/opengauss300_0708/backup/m1.sql -p 3436 postgres -t dd1 -t dd2 -F p
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908193429-7b55a105-21d5-4403-bc8b-0ce1a2f6cc6a.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=41&id=u3441ebac&margin=%5Bobject%20Object%5D&name=image.png&originHeight=51&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=56558&status=done&style=none&taskId=u14bc59fa-7f8f-474a-8892-cef500dec5d&title=&width=443.2)
(6)导出时,排除两个表,导出文件格式为文本格式。
gs_dump -f /home/opengauss300_0708/backup/m2.sql -p 3436 postgres -T dd1 -T dd2 -F p
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908202991-7917b5b2-dbc4-453c-a672-4bcaf6ca17e4.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=39&id=u4bec73f4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=49&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=58012&status=done&style=none&taskId=ube29a4c1-9098-426f-a22a-c880526dbb1&title=&width=443.2)
(7)导出表1的定义和数据,只导出表2的定义,导出文件格式为tar归档格式。
gs_dump -f /home/opengauss300_0708/backup/m3.tar -p 3436 postgres -t dd1 -t dd2 --exclude-table-data dd2 -F t
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908214236-508c8634-0957-4f5f-959b-bd8be7d76fc3.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=33&id=uab5304a9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=41&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=43063&status=done&style=none&taskId=u616f3469-2577-4f69-a76b-915ec94d682&title=&width=443.2)
(8)导出表的定义和数据,并对导出文件进行加密,导出文件格式为文本格式。
gs_dump -f /home/opengauss300_0708/backup/m4.sql -p 3436 postgres -t dd1 --with-encryption AES128 --with-key abcdefg_?1234567 -F p
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908222439-01895d2b-b756-4db1-a6c5-9157ce3a157a.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=36&id=u1e54b1e4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=45&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=40671&status=done&style=none&taskId=uf2d174ee-05ae-43b0-b3d4-7ea502f72ed&title=&width=443.2)
(9)导出public模式下所有表(包括视图、序列和外表)和自定义模式中的表,包含数据和表定义,导出文件格式为自定义归档格式。
gs_dump -f /home/opengauss300_0708/backup/m5.dmp -p 3436 postgres -t public.* -t myschema.dd1 -F c
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908230084-ce873cb7-dc6a-4c97-84b7-3412c670a9a4.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=37&id=u5d51992e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=46&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=50842&status=done&style=none&taskId=ud926a090-a7be-425b-8491-aac913d82ca&title=&width=443.2) +**+++** +**title="openGauss社区入门(opengauss-逻辑备份命令)"** +**date="2022-08-19"** +**tags=["openGauss社区开发入门"]** +**archives=“2022-08”** +**author=“wangrururu”** +**summary="openGauss社区开发入门"** +**img="/zh/post/wzr/title/title.jpg"** +**times="19:15"** +**+++** +openGauss支持使用gs_dump工具导出表级的内容,包含表定义和表数据。视图、序列和外表属于特殊的表。用户可通过灵活的自定义方式导出表内容,不仅支持选定一个表或多个表的导出,还支持排除一个表或者多个表的导出。可根据需要自定义导出如下信息: +•导出表全量信息,包含表数据和表定义。 +•仅导出数据,不包含表定义。 +•仅导出表定义。 +1.常用参数 +(1)-U 连接数据库的用户名。 +(2)-W 指定用户连接的密码。 +(3)-f 将导出文件发送至指定目录文件夹。如果这里省略,则使用标准输出。 +(4)-p 指定服务器所侦听的TCP端口或本地Unix域套接字后缀,以确保连接。 +(5)dbname 需要导出的数据库名称。 +(6)-t 指定导出的表(或视图、序列、外表),可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。 +(7)-F 选择导出文件格式。-F参数值如下: +•p:纯文本格式 +•c:自定义归档 +•d:目录归档格式 +•t:tar归档格式 +(8)-T 不转储的表(或视图、或序列、或外表)对象列表,可以使用多个-t选项来选择多个表,也可以使用通配符指定多个表对象。 +2.示例 +(1)导出表的定义和数据,导出文件格式为文本格式。 +gs_dump -f /home/opengauss300_0708/backup/m.sql -p 3436 postgres -t dd1 -F p +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908148094-ccb6939f-cffd-4b41-9440-454eaf8361d6.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=43&id=u6997755e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=54&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=65145&status=done&style=none&taskId=u74d1d0f3-090f-4bfd-bca1-dab80f3922d&title=&width=443.2) +(2)只导出表的数据,导出文件格式为tar归档格式。 +gs_dump -f /home/opengauss300_0708/backup/m.tar -p 3436 postgres -t dd1 -a -F t +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908162097-b217e7c4-7e67-49b1-98c8-69f796b746b8.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=27&id=u43cdc23b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=34&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=37232&status=done&style=none&taskId=u88ffe901-057c-4233-bfe7-476253371a8&title=&width=443.2) +(3)导出表的定义,导出文件格式为目录归档格式。 +gs_dump -f /home/opengauss300_0708/backup/m -p 3436 postgres -t dd1 -s -F d +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908175403-885cce65-9c45-4b9f-a81d-1915d84fa625.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=44&id=ub7383955&margin=%5Bobject%20Object%5D&name=image.png&originHeight=55&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=64834&status=done&style=none&taskId=u1730ce70-058a-46b9-a0ee-6f957e076ce&title=&width=443.2) +(4)不导出表,导出文件格式为自定义归档格式。 +gs_dump -f /home/opengauss300_0708/backup/m.dmp -p 3436 postgres -T dd1 -F c +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908186579-1a0bc9e4-bc4f-4b11-b61b-99f9643bebc1.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=44&id=u37964949&margin=%5Bobject%20Object%5D&name=image.png&originHeight=55&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=65317&status=done&style=none&taskId=u86606486-7061-4325-b722-5facd291159&title=&width=443.2) +(5)同时导出两个表,导出文件格式为文本格式。 +gs_dump -f /home/opengauss300_0708/backup/m1.sql -p 3436 postgres -t dd1 -t dd2 -F p +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908193429-7b55a105-21d5-4403-bc8b-0ce1a2f6cc6a.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=41&id=u3441ebac&margin=%5Bobject%20Object%5D&name=image.png&originHeight=51&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=56558&status=done&style=none&taskId=u14bc59fa-7f8f-474a-8892-cef500dec5d&title=&width=443.2) +(6)导出时,排除两个表,导出文件格式为文本格式。 +gs_dump -f /home/opengauss300_0708/backup/m2.sql -p 3436 postgres -T dd1 -T dd2 -F p +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908202991-7917b5b2-dbc4-453c-a672-4bcaf6ca17e4.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=39&id=u4bec73f4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=49&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=58012&status=done&style=none&taskId=ube29a4c1-9098-426f-a22a-c880526dbb1&title=&width=443.2) +(7)导出表1的定义和数据,只导出表2的定义,导出文件格式为tar归档格式。 +gs_dump -f /home/opengauss300_0708/backup/m3.tar -p 3436 postgres -t dd1 -t dd2 --exclude-table-data dd2 -F t +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908214236-508c8634-0957-4f5f-959b-bd8be7d76fc3.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=33&id=uab5304a9&margin=%5Bobject%20Object%5D&name=image.png&originHeight=41&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=43063&status=done&style=none&taskId=u616f3469-2577-4f69-a76b-915ec94d682&title=&width=443.2) +(8)导出表的定义和数据,并对导出文件进行加密,导出文件格式为文本格式。 +gs_dump -f /home/opengauss300_0708/backup/m4.sql -p 3436 postgres -t dd1 --with-encryption AES128 --with-key abcdefg_?1234567 -F p +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908222439-01895d2b-b756-4db1-a6c5-9157ce3a157a.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=36&id=u1e54b1e4&margin=%5Bobject%20Object%5D&name=image.png&originHeight=45&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=40671&status=done&style=none&taskId=uf2d174ee-05ae-43b0-b3d4-7ea502f72ed&title=&width=443.2) +(9)导出public模式下所有表(包括视图、序列和外表)和自定义模式中的表,包含数据和表定义,导出文件格式为自定义归档格式。 +gs_dump -f /home/opengauss300_0708/backup/m5.dmp -p 3436 postgres -t public.* -t myschema.dd1 -F c +![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660908230084-ce873cb7-dc6a-4c97-84b7-3412c670a9a4.png#clientId=ud815a6a8-8484-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=37&id=u5d51992e&margin=%5Bobject%20Object%5D&name=image.png&originHeight=46&originWidth=554&originalType=binary&ratio=1&rotation=0&showTitle=false&size=50842&status=done&style=none&taskId=ud926a090-a7be-425b-8491-aac913d82ca&title=&width=443.2) -- Gitee From aed964458ffa0f925bfdccb25e6674513d90c9a8 Mon Sep 17 00:00:00 2001 From: wangrururu Date: Sat, 20 Aug 2022 14:40:54 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20cont?= =?UTF-8?q?ent/zh/post/wzr/wzr.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/zh/post/wzr/wzr.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 content/zh/post/wzr/wzr.md diff --git a/content/zh/post/wzr/wzr.md b/content/zh/post/wzr/wzr.md deleted file mode 100644 index 64fd36ce..00000000 --- a/content/zh/post/wzr/wzr.md +++ /dev/null @@ -1,3 +0,0 @@ -**+++**
**title="openGauss社区入门(opengauss-事务管理小结)"**
**date="2022-08-11"**
**tags=["openGauss社区开发入门"]**
**archives=“2022-08”**
**author=“wangrururu”**
**summary="openGauss社区开发入门"**
**img="/zh/post/wzr/title/title.jpg"**
**times="10:06"**
**+++** - -**1.事务概念:**
在日常操作中,对于一组相关操作通常需要其全部成功或全部失败,在关系型数据库中,这组相关操作称为事务。
**2.事务特性:**
**原子性**(atomicity,A):事务必须以一个整体单元的形式工作,对于其数据的修改,要么全部执行,幺要么全都不执行。如果只执行事务中多个操作的前半部分就会出现错误,那么必须回滚所有操作,让数据在逻辑上回滚到先前的状态。
**一致性**(consistency,C):事务在完成时,必须使所有的数据都保持一致状态。
**隔离性**(isolation,I):事务查看数据时数据所处的状态,要么是零一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务是不会查看中间状态的数据的。
**持久性**(durability,D):事务完成之后,对于系统的影响是永久性的。即使今后出现致命的系统故障,数据也将一直保持。
**3. 事务的隔离级别**
openGauss支持的事务隔离级别有两个:
**Read Committed**(读提交):只有在事务提交后,其更新结果才会被其他事务看见。可以解决脏读问题。
**Repeateble Read**(重复读):在一个事务中,对于同一份数据的读取结果总是相同的,无论是否有其他事务对这份数据进行操作,以及这个事务是否提交。可以解决脏读、不可重复读。
**4.事务语法参数:**
(1)**transaction_isolation**:设置当前事务的隔离级别。
取值范围:字符串,只识别以下字符串,大小写空格敏感:
serializable:等价于REPEATABLE READ。
read committed:只能读取已提交的事务的数据(缺省),不能读取到未提交的数据。
repeatable read:仅能读取事务开始之前提交的数据,不能读取未提交的数据以及在事务执行期间由 其它并发事务提交的修改。
default:设置为default_transaction_isolation所设隔离级别。
默认值:read committed
(2)**transaction_read_only**:设置当前事务是只读事务。该参数在数据库恢复过程中/在备机里固定为on;否则为default_transaction_read_only的值。
取值范围:布尔型
on表示设置当前事务为只读事务。
off表示该事务可以是非只读事务。
默认值:off
(3)**xc_maintenance_mode**:设置系统进入维护模式。(谨慎打开这个开关,避免引起openGauss数据不一致)
取值范围:布尔型
on表示该功能启用。
off表示该功能被禁用。
默认值:off
(4)**allow_concurrent_tuple_update**:设置是否允许并发更新。
取值范围:布尔型
on表示该功能启用。
off表示该功能被禁用。
默认值:on
(5)**transaction_deferrable**:指定是否允许一个只读串行事务延迟执行,使其不会执行失败。
取值范围:布尔型
on表示允许执行。
off表示不允许执行。
默认值:off
(6)**enable_show_any_tuples**:该参数只有在只读事务中可用,用于分析。
取值范围:布尔型
on/true表示表中元组的所有版本都会可见。
off/false表示表中元组的所有版本都不可见。
默认值:off
(7)**replication_type**:标记当前HA模式是单主机模式、主备从模式还是一主多备模式。该参数用户不能自己去设置参数值。
取值范围:0~2
2 表示单主机模式,此模式无法扩展备机。
1 表示使用一主多备模式,全场景覆盖,推荐使用。
0 表示主备从模式,目前此模式暂不支持。
默认值:1
(8)**pgxc_node_name**:指定节点名称。在备机请求主机进行日志复制时,如果application_name参数没有被设置,那么pgxc_node_name参数会被用来作为备机在主机上的流复制槽名字。该流复制槽的命名方式为 "该参数值_备机ip_备机port"。其中,备机ip和备机port取自replconninfo参数中指定的备机ip和端口号。该流复制槽最大长度为61个字符,如果拼接后的字符串超过该长度,则会使用截断后的pgxc_node_name进行拼接,以保证流复制槽名字长度小于等于61个字符。此参数修改后会导致连接数据库实例失败,不建议进行修改。
取值范围:字符串
默认值:当前节点名称
(9)**enable_defer_calculate_snapshot**:延迟计算快照的xmin和oldestxmin,执行1000个事务或者间隔1s才触发计算,设置为on时可以在高负载场景下减少计算快照的开销,但是会导致oldestxmin推进较慢,影响垃圾元组回收,设置为off时xmin和oldestxmin可以实时推进,但是会增加计算快照时的开销。
取值范围:布尔型。
on表示延迟计算快照xmin和oldestxmin。
off表示实时计算快照xmin和oldestxmin。
默认值:on。
**5.自治事务**
在主事务执行过程中新启的独立的事务。自治事务的提交和回滚不会影响主事务已提交的数据,同时自治事务也不受主事务影响。自治事务在存储过程、函数和匿名块中定义,用PRAGMA AUTONOMOUS_TRANSACTION关键字来声明。
例如存储过程中含自治事务:
--建表
create table t2(a int, b int);
insert into t2 values(1,2);
select * from t2;
--创建包含自治事务的存储过程
CREATE OR REPLACE PROCEDURE autonomous_4(a int, b int)  AS
DECLARE
num3 int := a;
num4 int := b;
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
insert into t2 values(num3, num4);
END;
/
--创建调用自治事务存储过程的普通存储过程
CREATE OR REPLACE PROCEDURE autonomous_5(a int, b int)  AS
DECLARE
BEGIN
insert into t2 values(666, 666);
autonomous_4(a,b);
rollback;
END;
/
--调用普通存储过程
select autonomous_5(11,22);
--查看表结果
select * from t2 order by a;
结果为:**主事务的回滚,不会影响自治事务已经提交的内容**。
![image.png](https://cdn.nlark.com/yuque/0/2022/png/32435345/1660125046688-639e17e6-4b7c-44fc-a2ed-e3e912d89862.png#clientId=ufa95ed29-d1f0-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=102&id=u33d53ed8&margin=%5Bobject%20Object%5D&name=image.png&originHeight=127&originWidth=310&originalType=binary&ratio=1&rotation=0&showTitle=false&size=26237&status=done&style=none&taskId=ub4c309b7-988c-4de2-a59e-7c8390fb9e3&title=&width=248) -- Gitee