自制数据库迁移工具-C版-08-HappySunshineV1.7-(支持PG、达梦、Gbase8a)

目录

一、环境信息

二、简述

三、架构图

1、在线迁移

2、离线抽取

四、升级点

五、支持点

1、支持功能

2、离线抽取支持类型

(1)数字类型

(2)货币类型

(3)字符类型

(4)特殊字符类型

(5)二进制数据类型

(6)日期/时间类型

(7)布尔数据类型

(8)枚举类型

(9)几何类型

(10)网络地址类型

(11)位串类型

(12)文本搜索类型

(13)UUID类型

(14)XML类型

(15)JSON类型

(16)数组类型

(17)组合类型

(18)范围类型

[(19) 域类型](#(19) 域类型)

[(20) 对象标识符类型](#(20) 对象标识符类型)

[(21) pg_lsn 类型](#(21) pg_lsn 类型)

六、后续计划支持功能

七、安装包下载地址

八、参数介绍

1、离线抽取

2、在线迁移

九、安装步骤

1、用户创建

2、安装包解压

3、环境变量配置

4、环境变量生效

5、动态库链接检验

(1)HsManager

(2)G8aExecutor

(3)Pg2G8aExecutor

(4)Pg2DmExecutor

(5)HsPgUnload

6、操作系统限制修改

(1)/etc/security/limits.conf

(2)验证

7、在线迁移配置文件MigrationConfig.txt

[(1)Gbase8a -> Gbase8a](#(1)Gbase8a -> Gbase8a)

[(2)PG -> Gbase8a](#(2)PG -> Gbase8a)

[(3)PG -> Dm](#(3)PG -> Dm)

十、在线迁移性能对比测试

1、性能测试对比表格

2、测试表结构

(1)Gbase8a

(2)DM

(3)PG

3、测试数据样式

4、HappySunshine测试截图

[(1)PostgreSql -> Dm](#(1)PostgreSql -> Dm)

[(2)PostgreSql -> Gbase8a](#(2)PostgreSql -> Gbase8a)

[(3)Gbase8a-> Gbase8a](#(3)Gbase8a-> Gbase8a)

5、Kettle测试截图

[(1)PG -> Dm](#(1)PG -> Dm)

[(2)PG -> Gbase8a](#(2)PG -> Gbase8a)

[(3)Gbase8a-> Gbase8a](#(3)Gbase8a-> Gbase8a)

十一、PG离线抽取功能与性能

1、功能展示

(1)单库级抽取示例

(2)模式级抽取示例

(3)表级抽取示例

(4)数据加载示例

(5)抽取的表定义展示

(6)抽取的数据展示

(7)库内查询展示

2、性能展示

(1)表结构

(2)数据量

(3)单线程离线抽取

(4)多线程离线抽取

(5)包含大字段、枚举表性能对比

(6)不包含大字段、枚举表性能对比

十二、许可证

十三、需求&Bug


最新版本工具文档链接:HappySunshine

一、环境信息

|-----------------|------------------------------------------------------------------------------------------------------------------------------|
| 名称 | 值 |
| CPU | Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz |
| 操作系统 | CentOS Linux release 7.9.2009 (Core) |
| 内存 | 5G |
| 逻辑核数 | 6 |
| HappySunshine版本 | V1.7 |
| Kettle版本 | pdi-ce-9.5.0.1-261 |
| Gbase8a版本 | 8.6.2-R43.34.27468a27 |
| Pg版本 | PostgreSQL 14.5 |
| DM版本 | 1 DM Database Server 64 V8 2 DB Version: 0x7000c 3 03134284194-20240703-234060-20108 4 Msg Version: 12 5 Gsu level(5) cnt: 0 |

二、简述

HappySunshine数据库迁移工具是由C语言编写的多进程多线程程序,支持多种数据库之间的高效数据同步、数据离线抽取等,安装简便、简单配置即可使用,功能还在逐步完善中(其实是还在陆续补充新知识),有什么好的建议,大家可以在评论或私信告知。

三、架构图

1、在线迁移

画图水平感觉还不错,给自己点个赞。

HappySunshine数据库迁移工具由一个管理者进程和N个执行者进程组成,每个执行进程由一个生产者线程和N个消费者线程组成。

1、管理者进程启动。

2、管理者进程读取配置文件参数。

3、管理者进程创建共享内存。

4、管理者进程拉起N个执行者进程。

5、管理者进程通过共享存储中的任务队列,将需要迁移的表放入队列中。

6、执行者进程创建线程池。

7、执行者进程开辟一个生产者线程,N个消费者线程。

8、生产者线程从共享存储中的任务队列拿取任务,查询需要迁移表的条数,来决定迁移方式:LOAD或INSERT。如果进程数大于1,任务中包含的表有一个整型主键,会自动拆分数据为N份(进程数)。

9、如果是LOAD,由生产者线程单独完成。

10、如果是INSERT,将读取的数据行指针打包,发给线程池中的任务队列。

11、消费者线程从线程池中的任务队列拿取任务。

12、消费者线程将任务包解开,将数据清洗,并放入自己的缓冲区中,清洗完再把INSERT命令发给Gbase8a。

13、消费者线程执行任务失败,将任务状态置为错误,待生产者线程发现任务失败后,终止任务下发给线程池队列,重新到共享存储中的任务队列拿取任务。

14、消费者线程执行任务成功,就继续执行。

15、管理者进程将任务发送完成之后,将任务结束标记放入共享存储中的任务队列中。

16、生产者线程从共享存储中的任务队列中拿到任务结束标记后。等待屏障,也就是等待消费者线程完成所拿到的任务。

17、执行者进程等待所有的消费者、生产者结束后,回收线程池资源,释放自身所占用资源,结束退出。

18、管理者进程等待所有执行者进程结束后,回收进程资源,释放自身所占用资源,结束退出。

2、离线抽取

PG数据离线抽取功能是一个多线程程序,解析流程如上。

四、升级点

|----|---------------|---------------------------------------------------------------------------------------|
| 序号 | 名称 | 备注 |
| 1 | 普通表单表并行解析 | PG数据离线抽取功能,TOAST表第一次全扫入MAP暂不支持并行,在数据页解析阶段支持并行,包含大字段、枚举字段的表效率较之前版本提升2.4倍,不包含的提升3.6倍左右。 |
| 2 | 普通表定义抽取 | PG数据离线抽取功能,默认值暂不支持。 |
| 3 | BYTEA类型抽取性能优化 | PG数据离线抽取功能,提升10%左右,缓冲区拷贝减少。 |
| 4 | 分区主表数据解析流程优化 | PG数据离线抽取功能,分区主表不存储数据不解析,提示正常跳过,子表数据会正常解析。 |
| 5 | TOAST文件解析流程优化 | PG数据离线抽取功能,相比老版本,在文件较多较大时,性能提升效果较为明显。 |
| 6 | 修复部分内存泄漏逻辑 | PG数据离线抽取功能。 |
| 7 | | |

五、支持点

1、支持功能

|----|------|------------------|----------------------------------------------|
| 序号 | 模块 | 功能 | 备注 |
| 1 | 在线迁移 | Gbase8a到8a数据迁移 | INSERT、LOAD方式迁移,表定义及其他暂不支持。 |
| 2 | 在线迁移 | PG到Gbase8a数据迁移 | INSERT方式迁移,表定义及其他暂不支持。 |
| 3 | 在线迁移 | PG到DM数据迁移 | INSERT方式迁移,表定义及其他暂不支持。 |
| 4 | 在线迁移 | 多线程并发加载单表数据 | |
| 5 | 在线迁移 | 多进程并发加载单表数据 | 源端库为PG,迁移表包含单一整型主键,进程数设置大于1时,支持此项。 |
| 6 | 离线抽取 | PG数据离线抽取表级 | PG14.5版本,表级,PG数据库闭库情况下,抽取底层数据文件数据落地为COPY文本。 |
| 7 | 离线抽取 | PG数据离线抽取模式级 | PG14.5版本,模式级,PG数据库闭库情况下,抽取底层数据文件数据落地为COPY文本。 |
| 8 | 离线抽取 | PG数据离线抽取单库级 | PG14.5版本,单库级,PG数据库闭库情况下,抽取底层数据文件数据落地为COPY文本。 |
| 9 | 离线抽取 | PG 47种数据类型支持离线抽取 | PG14.5版本,具体类型见下文的支持列表。 |
| 10 | 离线抽取 | PG 普通表定义抽取 | PG14.5版本。 |
| 11 | 离线抽取 | PG 普通表单表并行解析 | PG14.5版本。 |

2、离线抽取支持类型

(1)数字类型

名字 是否支持
smallint
integer
bigint
decimal
numeric
real
double precision
smallserial
serial
bigserial

(2)货币类型

名字 是否支持
money

(3)字符类型

名字 是否支持
character varying(n), varchar(n)
character(n), char(n)
text

(4)特殊字符类型

名字 是否支持
"char"
name

(5)二进制数据类型

名字 是否支持
bytea

(6)日期/时间类型

名字 是否支持
timestamp [ (p) ] [ without time zone ]
timestamp [ (p) ] with time zone
date
time [ (p) ] [ without time zone ]
time [ (p) ] with time zone
interval [ fields ] [ (p) ]

(7)布尔数据类型

名字 是否支持
boolean

**(8)**枚举类型

名字 是否支持
enum

(9)几何类型

名字 是否支持
point
line
lseg
box
path(封闭路径
path(开放路径
polygon
circle

(10)网络地址类型

名字 是否支持
cidr
inet
macaddr
macaddr8

**(11)**位串类型

名字 是否支持
bit
bit varying

(12)文本搜索类型

| 名字 | 是否支持 |
| tsvector | × |

tsquery ×

(13)UUID类型

| 名字 | 是否支持 |

UUID

(14)XML类型

| 名字 | 是否支持 |

XML

(15)JSON类型

| 名字 | 是否支持 |
| JSON | √ |
| JSONB | √ |

JSONPATH

(16)数组类型

内部实现支持N维,只验证了以下基础类型,其他基础类型也是支持的,只是未测试。

| 名字 | 是否支持 |
| INT\[\] | √ |

VARCHAR\[\]

(17)组合类型

| 名字 | 是否支持 |

×

(18)范围类型

| 名字 | 是否支持 |

×

(19) 域类型

| 名字 | 是否支持 |

×

(20) 对象标识符类型

| 名字 | 是否支持 |
| OID | √ |

XID

(21) pg_lsn 类型

| 名字 | 是否支持 |

pg_lsn ×

六、后续计划支持功能

展望是挺多的,奈何时间不多呀。

|----|----------------|----|
| 序号 | 功能 | 备注 |
| 1 | PG单表并行离线抽取性能优化 | |
| 2 | PG离线抽取支持断点续传 | |
| 3 | 重构PG离线抽取代码 | |
| 4 | 支持Oracle数据迁移 | |
| 5 | 支持达梦快速装载 | |
| 6 | 支持信号处理 | |
| 7 | 支持DM 切分数据 | |
| 8 | 支持PG 切分数据 | |
| 9 | 支持目的端为PG | |

七、安装包下载地址

GITHUB-HappySunshine-release版下载地址

八、参数介绍

1、离线抽取

|----|---------|------------------------------|
| 序号 | 参数介绍 | 举例 |
| 1 | PG数据库目录 | /opt/Pg14-5/Data/base/13892/ |
| 2 | 数据落地目录 | /home/czg/TestPgData/ |
| 3 | PG数据块大小 | 8192 |
| 4 | 模式名 | 指定模式名,'*'代表所有模式。 |
| 5 | 表名 | 指定表名,'*'代表所有表。 |
| 6 | 线程数 | 例如3,支持1 - N。 |
| 7 | 日志级别 | 例如2,建议为2,支持0 - 4。 |

2、在线迁移

|----|---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 参数 | 备注 |
| 1 | Tool | Tool标签头,下面只能写Tool相关参数。 |
| 2 | ProcessNums | 程序迁移时开的进程数。 |
| 3 | Level | 迁移级别。 1:表级迁移,SpecifiedTab生效。 2:库级迁移,MigrationDb、BlackList生效。 |
| 4 | OsInfo | Gbase8a -> Gbase8a LOAD使用。 工具所在操作系统IP;操作系统用户;操作系统用户密码; 长度同下方的数据库IP;数据库用户名;数据库用户密码; |
| 5 | OneBatchNums | MigrationType为0、1、2的情况下,支持此参数,一个批次插入的数据条数。(INSERT方式) |
| 6 | SwitchNums | MigrationType为0的情况下,支持此参数,此数以上使用LOAD,以下使用INSERT。 |
| 7 | MigrationType | 迁移类型,支持0、1、2。 0 : Gbase8a -> Gbase8a 1 : PostgreSql -> Gbase8a 2 : PostgreSql -> Dm |
| 8 | Source | Source标签头,下面只能写Source相关参数。 |
| 9 | ConnInfo | 样例:'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;' 1、单个IP长度限制19,数据库IP地址。 2、单个用户名长度限制19,数据库用户名。 3、单个用户名密码长度限制29,数据库密码。 4、单个数据库名长度限制29,数据库名。 5、数据库端口。 6、长度限制9,数据库连接字符集,支持utf8和gbk,如果是达梦连接,需填写数字,对照表如下: (1)UTF8 1 (2)GBK 2 (3)BIG5 3 (4)ISO_8859_9 4 (5)EUC_JP 5 (6)EUC_KR 6 (7)KOI8R 7 (8)ISO_8859_1 8 (9)SQL_ASCII 9 (10)GB18030 10 (11)ISO_8859_11 11 |
| 10 | MigrationDb | 库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。 MigrationType为1的情况下,此为PG的模式名。 |
| 11 | BlackList | 库级迁移参数,支持128个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。 |
| 12 | SpecifiedTab | (1)MigrationType为0的情况下,表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;' (2)MigrationType为1的情况下,表级迁移参数,格式:'源端查询字段;源端模式名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;' (3)如果没有特定条件,可以不写,但必须有分隔符,举例如下: ';czg;testtab;;;zxj;NewTab;' 这样相当于testtab迁移到NewTab,没有任何特殊条件。 这个可以有多个标签,想迁移多少张表就写几个标签。 |
| 13 | Target | Target标签头,下面只能写Target相关参数。 |
| 14 | ConnInfo | 参考Source的。 |
| 15 | MigrationDb | 参考Source的。 |

九、安装步骤

大家也可以参考Readme.txt内容。

1、用户创建

大家也可以不创建,这是为了不影响其他用户,还有安全性考虑。

bash 复制代码
[root@czg0 ~]# groupadd lzl -g 2024
[root@czg0 ~]# useradd  lzl -g 2024 -u 2024
[root@czg0 ~]# passwd   lzl

2、安装包解压

bash 复制代码
[lzl@czg0 ~]$ unzip HappySunshine_V1.5_X86_Centos7.9_Release_日期.zip

3、环境变量配置

bash 复制代码
[root@czg0 ~]# cat /home/lzl/.bashrc 
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# Uncomment the following line if you don't like systemctl's auto-paging feature:
# export SYSTEMD_PAGER=

# User specific aliases and functions

export HAPPY_SUNSHINE_HOME=/home/lzl/HappySunshine
export LD_LIBRARY_PATH=$HAPPY_SUNSHINE_HOME/Libs:$LD_LIBRARY_PATH

4、环境变量生效

bash 复制代码
[lzl@czg0 ~]$ source /home/lzl/.bashrc 

5、动态库链接检验

(1)HsManager

bash 复制代码
[lzl@czg0 ~]$ ldd HappySunshine/Exec/HsManager 
        linux-vdso.so.1 =>  (0x00007ffc3a9fa000)
        libPublic.so => /home/lzl/HappySunshine/Libs/libPublic.so (0x00007f094f383000)
        libLog.so => /home/lzl/HappySunshine/Libs/libLog.so (0x00007f094f17e000)
        libSqQueue.so => /home/lzl/HappySunshine/Libs/libSqQueue.so (0x00007f094ef78000)
        libPthread.so => /home/lzl/HappySunshine/Libs/libPthread.so (0x00007f094ed6b000)
        libFileOperate.so => /home/lzl/HappySunshine/Libs/libFileOperate.so (0x00007f094eb65000)
        libDataConvertion.so => /home/lzl/HappySunshine/Libs/libDataConvertion.so (0x00007f094e960000)
        libProcess.so => /home/lzl/HappySunshine/Libs/libProcess.so (0x00007f094e757000)
        libGbase8aDb.so => /home/lzl/HappySunshine/Libs/libGbase8aDb.so (0x00007f094e550000)
        libgbase.so.16 => /home/lzl/HappySunshine/Libs/libgbase.so.16 (0x00007f094e090000)
        libHashTable.so => /home/lzl/HappySunshine/Libs/libHashTable.so (0x00007f094de8c000)
        libPgDb.so => /home/lzl/HappySunshine/Libs/libPgDb.so (0x00007f094dc83000)
        libpq.so.5 => /home/lzl/HappySunshine/Libs/libpq.so.5 (0x00007f094da2d000)
        libHsPublic.so => /home/lzl/HappySunshine/Libs/libHsPublic.so (0x00007f094d82a000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f094d45c000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f094d240000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f094d03c000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f094cd3a000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f094f586000)

(2)G8aExecutor

bash 复制代码
[lzl@czg0 ~]$ ldd HappySunshine/Exec/G8aExecutor 
        linux-vdso.so.1 =>  (0x00007ffecf9fd000)
        libPublic.so => /home/lzl/HappySunshine/Libs/libPublic.so (0x00007faca38b8000)
        libLog.so => /home/lzl/HappySunshine/Libs/libLog.so (0x00007faca36b3000)
        libSqQueue.so => /home/lzl/HappySunshine/Libs/libSqQueue.so (0x00007faca34ad000)
        libPthread.so => /home/lzl/HappySunshine/Libs/libPthread.so (0x00007faca32a0000)
        libFileOperate.so => /home/lzl/HappySunshine/Libs/libFileOperate.so (0x00007faca309a000)
        libDataConvertion.so => /home/lzl/HappySunshine/Libs/libDataConvertion.so (0x00007faca2e95000)
        libProcess.so => /home/lzl/HappySunshine/Libs/libProcess.so (0x00007faca2c8c000)
        libGbase8aDb.so => /home/lzl/HappySunshine/Libs/libGbase8aDb.so (0x00007faca2a85000)
        libgbase.so.16 => /home/lzl/HappySunshine/Libs/libgbase.so.16 (0x00007faca25c5000)
        libMyPool.so => /home/lzl/HappySunshine/Libs/libMyPool.so (0x00007faca23c2000)
        libHashTable.so => /home/lzl/HappySunshine/Libs/libHashTable.so (0x00007faca21be000)
        libHsPublic.so => /home/lzl/HappySunshine/Libs/libHsPublic.so (0x00007faca1fbb000)
        libc.so.6 => /lib64/libc.so.6 (0x00007faca1bed000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007faca19d1000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007faca17cd000)
        libm.so.6 => /lib64/libm.so.6 (0x00007faca14cb000)
        /lib64/ld-linux-x86-64.so.2 (0x00007faca3abb000)

(3)Pg2G8aExecutor

bash 复制代码
[lzl@czg0 ~]$ ldd HappySunshine/Exec/Pg2G8aExecutor 
        linux-vdso.so.1 =>  (0x00007ffdea9d0000)
        libPublic.so => /home/lzl/HappySunshine/Libs/libPublic.so (0x00007f2c7a38f000)
        libLog.so => /home/lzl/HappySunshine/Libs/libLog.so (0x00007f2c7a18a000)
        libSqQueue.so => /home/lzl/HappySunshine/Libs/libSqQueue.so (0x00007f2c79f84000)
        libPthread.so => /home/lzl/HappySunshine/Libs/libPthread.so (0x00007f2c79d77000)
        libFileOperate.so => /home/lzl/HappySunshine/Libs/libFileOperate.so (0x00007f2c79b71000)
        libDataConvertion.so => /home/lzl/HappySunshine/Libs/libDataConvertion.so (0x00007f2c7996c000)
        libProcess.so => /home/lzl/HappySunshine/Libs/libProcess.so (0x00007f2c79763000)
        libGbase8aDb.so => /home/lzl/HappySunshine/Libs/libGbase8aDb.so (0x00007f2c7955c000)
        libgbase.so.16 => /home/lzl/HappySunshine/Libs/libgbase.so.16 (0x00007f2c7909c000)
        libMyPool.so => /home/lzl/HappySunshine/Libs/libMyPool.so (0x00007f2c78e99000)
        libPgDb.so => /home/lzl/HappySunshine/Libs/libPgDb.so (0x00007f2c78c90000)
        libpq.so.5 => /home/lzl/HappySunshine/Libs/libpq.so.5 (0x00007f2c78a3a000)
        libHashTable.so => /home/lzl/HappySunshine/Libs/libHashTable.so (0x00007f2c78836000)
        libHsPublic.so => /home/lzl/HappySunshine/Libs/libHsPublic.so (0x00007f2c78633000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2c78265000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2c78049000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f2c77e45000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f2c77b43000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f2c7a592000)

(4)Pg2DmExecutor

bash 复制代码
[lzl@czg0 ~]$ ldd HappySunshine/Exec/Pg2DmExecutor 
        linux-vdso.so.1 =>  (0x00007ffd4eb65000)
        libPublic.so => /home/lzl/HappySunshine/Libs/libPublic.so (0x00007f81c49f0000)
        libLog.so => /home/lzl/HappySunshine/Libs/libLog.so (0x00007f81c47eb000)
        libSqQueue.so => /home/lzl/HappySunshine/Libs/libSqQueue.so (0x00007f81c45e5000)
        libPthread.so => /home/lzl/HappySunshine/Libs/libPthread.so (0x00007f81c43d8000)
        libFileOperate.so => /home/lzl/HappySunshine/Libs/libFileOperate.so (0x00007f81c41d2000)
        libDataConvertion.so => /home/lzl/HappySunshine/Libs/libDataConvertion.so (0x00007f81c3fcd000)
        libProcess.so => /home/lzl/HappySunshine/Libs/libProcess.so (0x00007f81c3dc4000)
        libMyPool.so => /home/lzl/HappySunshine/Libs/libMyPool.so (0x00007f81c3bc1000)
        libLinkList.so => /home/lzl/HappySunshine/Libs/libLinkList.so (0x00007f81c39bd000)
        libPgDb.so => /home/lzl/HappySunshine/Libs/libPgDb.so (0x00007f81c37b4000)
        libpq.so.5 => /home/lzl/HappySunshine/Libs/libpq.so.5 (0x00007f81c355e000)
        libDmDb.so => /home/lzl/HappySunshine/Libs/libDmDb.so (0x00007f81c333f000)
        libdmdpi.so => /home/lzl/HappySunshine/Libs/libdmdpi.so (0x00007f81c2485000)
        libdmcpt.so => /home/lzl/HappySunshine/Libs/libdmcpt.so (0x00007f81c2252000)
        libdmlogmnr_client.so => /home/lzl/HappySunshine/Libs/libdmlogmnr_client.so (0x00007f81c0595000)
        libHashTable.so => /home/lzl/HappySunshine/Libs/libHashTable.so (0x00007f81c0391000)
        libHsPublic.so => /home/lzl/HappySunshine/Libs/libHsPublic.so (0x00007f81c018e000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f81bfdc0000)
        libm.so.6 => /lib64/libm.so.6 (0x00007f81bfabe000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f81bf8a2000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f81bf69a000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f81bf496000)
        libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f81bf18e000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f81bef78000)
        libdmcfg.so => /home/lzl/HappySunshine/Libs/libdmcfg.so (0x00007f81beb1a000)
        libdmclientlex.so => /home/lzl/HappySunshine/Libs/libdmclientlex.so (0x00007f81be8e5000)
        libdmcomm.so => /home/lzl/HappySunshine/Libs/libdmcomm.so (0x00007f81be6b2000)
        libdmcvt.so => /home/lzl/HappySunshine/Libs/libdmcvt.so (0x00007f81bdf34000)
        libdmcpr.so => /home/lzl/HappySunshine/Libs/libdmcpr.so (0x00007f81bdd30000)
        libdmelog.so => /home/lzl/HappySunshine/Libs/libdmelog.so (0x00007f81bdac1000)
        libdmmsg.so => /home/lzl/HappySunshine/Libs/libdmmsg.so (0x00007f81bd8b1000)
        libdmcalc.so => /home/lzl/HappySunshine/Libs/libdmcalc.so (0x00007f81bd618000)
        libdmcyt.so => /home/lzl/HappySunshine/Libs/libdmcyt.so (0x00007f81bd3f3000)
        libdmos.so => /home/lzl/HappySunshine/Libs/libdmos.so (0x00007f81bd1be000)
        libdmutl.so => /home/lzl/HappySunshine/Libs/libdmutl.so (0x00007f81bcfa3000)
        libdmmem.so => /home/lzl/HappySunshine/Libs/libdmmem.so (0x00007f81bcd90000)
        libdmbtr.so => /home/lzl/HappySunshine/Libs/libdmbtr.so (0x00007f81bcb5c000)
        libdmtrx.so => /home/lzl/HappySunshine/Libs/libdmtrx.so (0x00007f81bc7b5000)
        libdmstrt.so => /home/lzl/HappySunshine/Libs/libdmstrt.so (0x00007f81bc5a6000)
        libdmknl.so => /home/lzl/HappySunshine/Libs/libdmknl.so (0x00007f81bc343000)
        libdmstg.so => /home/lzl/HappySunshine/Libs/libdmstg.so (0x00007f81bc0f4000)
        libdmblb.so => /home/lzl/HappySunshine/Libs/libdmblb.so (0x00007f81bbeb8000)
        libdmnsort.so => /home/lzl/HappySunshine/Libs/libdmnsort.so (0x00007f81bbb9b000)
        libdmllog.so => /home/lzl/HappySunshine/Libs/libdmllog.so (0x00007f81bb974000)
        libdmrs.so => /home/lzl/HappySunshine/Libs/libdmrs.so (0x00007f81bb76f000)
        libdmsys.so => /home/lzl/HappySunshine/Libs/libdmsys.so (0x00007f81bb568000)
        libdmrarch.so => /home/lzl/HappySunshine/Libs/libdmrarch.so (0x00007f81bb313000)
        libdmtrv.so => /home/lzl/HappySunshine/Libs/libdmtrv.so (0x00007f81bb0d9000)
        libdmtimer.so => /home/lzl/HappySunshine/Libs/libdmtimer.so (0x00007f81baed3000)
        libdmmout.so => /home/lzl/HappySunshine/Libs/libdmmout.so (0x00007f81babfe000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f81c4bf3000)
        libdmdcrm.so => /home/lzl/HappySunshine/Libs/libdmdcrm.so (0x00007f81ba9f1000)
        libdmshm.so => /home/lzl/HappySunshine/Libs/libdmshm.so (0x00007f81ba7ec000)
        libdmshmm.so => /home/lzl/HappySunshine/Libs/libdmshmm.so (0x00007f81ba5e6000)
        libdmckpt.so => /home/lzl/HappySunshine/Libs/libdmckpt.so (0x00007f81ba3ca000)
        libdmfil.so => /home/lzl/HappySunshine/Libs/libdmfil.so (0x00007f81ba1a5000)
        libdmdta.so => /home/lzl/HappySunshine/Libs/libdmdta.so (0x00007f81b9eb8000)
        libdmrlog.so => /home/lzl/HappySunshine/Libs/libdmrlog.so (0x00007f81b9bf8000)
        libdmmal.so => /home/lzl/HappySunshine/Libs/libdmmal.so (0x00007f81b99b8000)
        libdmuthr.so => /home/lzl/HappySunshine/Libs/libdmuthr.so (0x00007f81b97a5000)
        libdmtlog.so => /home/lzl/HappySunshine/Libs/libdmtlog.so (0x00007f81b959b000)
        libdmdct.so => /home/lzl/HappySunshine/Libs/libdmdct.so (0x00007f81b8edb000)
        libdmregex.so => /home/lzl/HappySunshine/Libs/libdmregex.so (0x00007f81b8cd4000)
        libdmtbl.so => /home/lzl/HappySunshine/Libs/libdmtbl.so (0x00007f81b8ace000)
        libdmhfs.so => /home/lzl/HappySunshine/Libs/libdmhfs.so (0x00007f81b8835000)
        libdmlic.so => /home/lzl/HappySunshine/Libs/libdmlic.so (0x00007f81b8629000)
        libdmlnk.so => /home/lzl/HappySunshine/Libs/libdmlnk.so (0x00007f81b83f8000)
        libdmredo.so => /home/lzl/HappySunshine/Libs/libdmredo.so (0x00007f81b8143000)
        libdmrtree.so => /home/lzl/HappySunshine/Libs/libdmrtree.so (0x00007f81b7f31000)
        libdmenet.so => /home/lzl/HappySunshine/Libs/libdmenet.so (0x00007f81b7d0b000)
        libdmxmal.so => /home/lzl/HappySunshine/Libs/libdmxmal.so (0x00007f81b7af1000)
        libdmsbtree.so => /home/lzl/HappySunshine/Libs/libdmsbtree.so (0x00007f81b78ed000)
        libdmbcast.so => /home/lzl/HappySunshine/Libs/libdmbcast.so (0x00007f81b766f000)
        libdmscp.so => /home/lzl/HappySunshine/Libs/libdmscp.so (0x00007f81b7457000)
        libdmjson.so => /home/lzl/HappySunshine/Libs/libdmjson.so (0x00007f81b722e000)
        libdmspatial.so => /home/lzl/HappySunshine/Libs/libdmspatial.so (0x00007f81b6f55000)
        libdmvtdskm.so => /home/lzl/HappySunshine/Libs/libdmvtdskm.so (0x00007f81b6d44000)
        libdmdcr.so => /home/lzl/HappySunshine/Libs/libdmdcr.so (0x00007f81b6b3c000)
        libdmasmapi.so => /home/lzl/HappySunshine/Libs/libdmasmapi.so (0x00007f81b6915000)
        libdmasmapim.so => /home/lzl/HappySunshine/Libs/libdmasmapim.so (0x00007f81b66c0000)
        libdmdfi.so => /home/lzl/HappySunshine/Libs/libdmdfi.so (0x00007f81b64aa000)
        libdmvtdsk.so => /home/lzl/HappySunshine/Libs/libdmvtdsk.so (0x00007f81b62a3000)
        libdmasm.so => /home/lzl/HappySunshine/Libs/libdmasm.so (0x00007f81b6074000)
        libdmasmm.so => /home/lzl/HappySunshine/Libs/libdmasmm.so (0x00007f81b5db8000)
        libdmdfs.so => /home/lzl/HappySunshine/Libs/libdmdfs.so (0x00007f81b5b92000)

(5)HsPgUnload

bash 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# ldd HsPgUnload 
        linux-vdso.so.1 =>  (0x00007ffd0114b000)
        libPublic.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libPublic.so (0x00007f6ca9f69000)
        libLog.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libLog.so (0x00007f6ca9d63000)
        libPthread.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libPthread.so (0x00007f6ca9b58000)
        libPgReadData.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libPgReadData.so (0x00007f6ca9921000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f6ca9705000)
        libDataConvertion.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libDataConvertion.so (0x00007f6ca9500000)
        libFileOperate.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libFileOperate.so (0x00007f6ca92f7000)
        libHashTable.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libHashTable.so (0x00007f6ca90f0000)
        libTree.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libTree.so (0x00007f6ca8edf000)
        libLinkList.so => /opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/Cmake/Libs/libLinkList.so (0x00007f6ca8cd4000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f6ca8906000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f6caa16c000)

如果有动态库没有找到,就要看看环境变量是否配置正确或是否生效。

如果是安装包中缺少动态库,可以留言告知。

6、操作系统限制修改

(1)/etc/security/limits.conf

添加如下内容

bash 复制代码
lzl soft nofile 1048576
lzl hard nofile 1048576
lzl soft nproc  131072
lzl hard nproc  131072
lzl soft stack  1048576
lzl hard stack  1048576
lzl soft core   unlimited
lzl hard core   unlimited

(2)验证

记得重登操作系统用户,再执行如下命令

bash 复制代码
[lzl@czg0 ~]$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 15593
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1048576
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 1048576
cpu time               (seconds, -t) unlimited
max user processes              (-u) 131072
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

7、在线迁移配置文件MigrationConfig.txt

具体的内容我都在配置文件中写好,大家按照规则来就行。

(1)Gbase8a -> Gbase8a

bash 复制代码
//*代表不可以空
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//SpecifiedTab参数可以有多个。
 
[Tool]                                                           //工具信息。

ProcessNums   : '1;'                                             //*程序迁移时开的进程数。

Level         : '1;'                                             //*迁移级别。
                                                                 //2:库级迁移,BlackList生效。
                                                                 //1:表级迁移,SpecifiedTab生效。
OsInfo        : '192.168.142.12;gbase;gbase;'                    //*Gbase8a -> Gbase8a LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;

OneBatchNums  : '50000;'                                         //*MigrationType为0、1、2的情况下,支持此参数,一个批次插入的数据条数。(INSERT方式)

SwitchNums    : '3000000;'                                       //*MigrationType为0的情况下,支持此参数,此数以上使用LOAD,以下使用INSERT。

MigrationType : '0;'                                             //*迁移类型,支持0、1、2。
                                                                 //0 : Gbase8a     -> Gbase8a
                                                                 //1 : PostgreSql  -> Gbase8a
                                                                 //2 : PostgreSql  -> Dm
                          
[Source]                                                         //源端信息。

ConnInfo      : '192.168.142.12;root;;czg;5258;utf8;'            //'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
                                                                 //*单个IP长度限制19,数据库IP地址。
                                                                 //*单个用户名长度限制12,数据库用户名。
                                                                 //*单个用户名密码长度限制29,数据库密码。
                                                                 //*单个数据库名长度限制29,数据库名。
                                                                 //*数据库端口。
                                                                 //*长度限制9,数据库连接字符集,支持utf8和gbk,如果是达梦连接,需填写数字,对照表如下:
                                                                 //(1)UTF8                            1
                                                                 //(2)GBK                             2
                                                                 //(3)BIG5                            3
                                                                 //(4)ISO_8859_9                      4
                                                                 //(5)EUC_JP                          5
                                                                 //(6)EUC_KR                          6
                                                                 //(7)KOI8R                           7
                                                                 //(8)ISO_8859_1                      8
                                                                 //(9)SQL_ASCII                       9
                                                                 //(10)GB18030                        10
                                                                 //(11)ISO_8859_11                    11

MigrationDb   : 'public;'                                        //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
                                                                 //MigrationType为1的情况下,此为PG的模式名。

BlackList     : ''                                               //库级迁移参数,支持50个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        

#SpecifiedTab  : 'a,b,c;czg;testtab;;x,y,z;zxj;NewTab;'            
                                                                 //MigrationType为0的情况下,表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //MigrationType为1的情况下,表级迁移参数,格式:'源端查询字段;源端模式名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //如果没有特定条件,可以不写,但必须有分隔符,举例如下:
                                                                 //';czg;testtab;;;zxj;NewTab;'
                                                                 //这样相当于testtab迁移到NewTab,没有任何特殊条件。
                                                                 //这个可以有多个标签,想迁移多少张表就写几个标签。
#SpecifiedTab  : ';czg;testtab_copy;;;zxj;testtab_copy;'
#SpecifiedTab  : ';czg;czg;;;zxj;czg;'

#SpecifiedTab  : ';public;testtab;;;zxj;testtab;'
#SpecifiedTab  : ';public;students;;;zxj;students;'
#SpecifiedTab  : ';public;haha;;;zxj;haha;'

SpecifiedTab  : ';public;testtab;;;zxj;testtab;'

[Target]                                                         //目的端信息。

ConnInfo      : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'

MigrationDb   : 'zxj;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。

(2)PG -> Gbase8a

bash 复制代码
//*代表不可以空
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//SpecifiedTab参数可以有多个。
 
[Tool]                                                           //工具信息。

ProcessNums   : '1;'                                             //*程序迁移时开的进程数。

Level         : '1;'                                             //*迁移级别。
                                                                 //2:库级迁移,BlackList生效。
                                                                 //1:表级迁移,SpecifiedTab生效。
OsInfo        : '192.168.142.12;gbase;gbase;'                    //*Gbase8a -> Gbase8a LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;

OneBatchNums  : '50000;'                                         //*MigrationType为0、1、2的情况下,支持此参数,一个批次插入的数据条数。(INSERT方式)

SwitchNums    : '3000000;'                                       //*MigrationType为0的情况下,支持此参数,此数以上使用LOAD,以下使用INSERT。

MigrationType : '1;'                                             //*迁移类型,支持0、1、2。
                                                                 //0 : Gbase8a     -> Gbase8a
                                                                 //1 : PostgreSql  -> Gbase8a
                                                                 //2 : PostgreSql  -> Dm
                          
[Source]                                                         //源端信息。

ConnInfo      : '192.168.142.12;postgres;postgres;czg;5432;utf8;' //'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
                                                                 //*单个IP长度限制19,数据库IP地址。
                                                                 //*单个用户名长度限制12,数据库用户名。
                                                                 //*单个用户名密码长度限制29,数据库密码。
                                                                 //*单个数据库名长度限制29,数据库名。
                                                                 //*数据库端口。
                                                                 //*长度限制9,数据库连接字符集,支持utf8和gbk,如果是达梦连接,需填写数字,对照表如下:
                                                                 //(1)UTF8                            1
                                                                 //(2)GBK                             2
                                                                 //(3)BIG5                            3
                                                                 //(4)ISO_8859_9                      4
                                                                 //(5)EUC_JP                          5
                                                                 //(6)EUC_KR                          6
                                                                 //(7)KOI8R                           7
                                                                 //(8)ISO_8859_1                      8
                                                                 //(9)SQL_ASCII                       9
                                                                 //(10)GB18030                        10
                                                                 //(11)ISO_8859_11                    11

MigrationDb   : 'public;'                                        //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
                                                                 //MigrationType为1的情况下,此为PG的模式名。

BlackList     : ''                                               //库级迁移参数,支持50个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        

#SpecifiedTab  : 'a,b,c;czg;testtab;;x,y,z;zxj;NewTab;'            
                                                                 //MigrationType为0的情况下,表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //MigrationType为1的情况下,表级迁移参数,格式:'源端查询字段;源端模式名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //如果没有特定条件,可以不写,但必须有分隔符,举例如下:
                                                                 //';czg;testtab;;;zxj;NewTab;'
                                                                 //这样相当于testtab迁移到NewTab,没有任何特殊条件。
                                                                 //这个可以有多个标签,想迁移多少张表就写几个标签。
#SpecifiedTab  : ';czg;testtab_copy;;;zxj;testtab_copy;'
#SpecifiedTab  : ';czg;czg;;;zxj;czg;'

#SpecifiedTab  : ';public;testtab;;;zxj;testtab;'
#SpecifiedTab  : ';public;students;;;zxj;students;'
#SpecifiedTab  : ';public;haha;;;zxj;haha;'

SpecifiedTab  : ';public;testtab;;;zxj;testtab;'

[Target]                                                         //目的端信息。

ConnInfo      : '192.168.142.12;czg;qwer1234;zxj;5258;utf8;'

MigrationDb   : 'zxj;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。

(3)PG -> Dm

bash 复制代码
//*代表不可以空
//单引号包围参数,分号分割参数项
//每行开头不可以有空格,不然会跳过此参数检查。
//SpecifiedTab参数可以有多个。
 
[Tool]                                                           //工具信息。

ProcessNums   : '1;'                                             //*程序迁移时开的进程数。

Level         : '1;'                                             //*迁移级别。
                                                                 //2:库级迁移,BlackList生效。
                                                                 //1:表级迁移,SpecifiedTab生效。
OsInfo        : '192.168.142.12;gbase;gbase;'                    //*Gbase8a -> Gbase8a LOAD使用。工具所在操作系统IP;操作系统用户;操作系统用户密码;长度同下方的数据库IP;数据库用户名;数据库用户密码;

OneBatchNums  : '50000;'                                         //*MigrationType为0、1、2的情况下,支持此参数,一个批次插入的数据条数。(INSERT方式)

SwitchNums    : '3000000;'                                       //*MigrationType为0的情况下,支持此参数,此数以上使用LOAD,以下使用INSERT。

MigrationType : '2;'                                             //*迁移类型,支持0、1、2。
                                                                 //0 : Gbase8a     -> Gbase8a
                                                                 //1 : PostgreSql  -> Gbase8a
                                                                 //2 : PostgreSql  -> Dm
                          
[Source]                                                         //源端信息。

ConnInfo      : '192.168.142.12;postgres;postgres;czg;5432;utf8;' //'IP;数据库用户名;数据库用户密码;数据库名;数据库端口号;数据连接字符集;'
                                                                 //*单个IP长度限制19,数据库IP地址。
                                                                 //*单个用户名长度限制12,数据库用户名。
                                                                 //*单个用户名密码长度限制29,数据库密码。
                                                                 //*单个数据库名长度限制29,数据库名。
                                                                 //*数据库端口。
                                                                 //*长度限制9,数据库连接字符集,支持utf8和gbk,如果是达梦连接,需填写数字,对照表如下:
                                                                 //(1)UTF8                            1
                                                                 //(2)GBK                             2
                                                                 //(3)BIG5                            3
                                                                 //(4)ISO_8859_9                      4
                                                                 //(5)EUC_JP                          5
                                                                 //(6)EUC_KR                          6
                                                                 //(7)KOI8R                           7
                                                                 //(8)ISO_8859_1                      8
                                                                 //(9)SQL_ASCII                       9
                                                                 //(10)GB18030                        10
                                                                 //(11)ISO_8859_11                    11

MigrationDb   : 'public;'                                        //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。
                                                                 //MigrationType为1的情况下,此为PG的模式名。

BlackList     : ''                                               //库级迁移参数,支持50个表,黑名单,表名,长度限制参考Db。和MigrationDb一起使用可以。        

#SpecifiedTab  : 'a,b,c;czg;testtab;;x,y,z;zxj;NewTab;'            
                                                                 //MigrationType为0的情况下,表级迁移参数,格式:'源端查询字段;源端库名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //MigrationType为1的情况下,表级迁移参数,格式:'源端查询字段;源端模式名;源端表名;源端过滤条件;目的端插入字段;目的端库名;目的端表名;'
                                                                 //如果没有特定条件,可以不写,但必须有分隔符,举例如下:
                                                                 //';czg;testtab;;;zxj;NewTab;'
                                                                 //这样相当于testtab迁移到NewTab,没有任何特殊条件。
                                                                 //这个可以有多个标签,想迁移多少张表就写几个标签。
#SpecifiedTab  : ';czg;testtab_copy;;;zxj;testtab_copy;'
#SpecifiedTab  : ';czg;czg;;;zxj;czg;'

#SpecifiedTab  : ';public;testtab;;;zxj;testtab;'
#SpecifiedTab  : ';public;students;;;zxj;students;'
#SpecifiedTab  : ';public;haha;;;zxj;haha;'

SpecifiedTab  : ';public;testtab;;;zxj;testtab;'

[Target]                                                         //目的端信息。

ConnInfo      : '192.168.142.12;SYSDBA;SYSDBA;;5238;1;'

MigrationDb   : 'zxj;'                                           //库级迁移参数,单个数据库名长度限制29,需要迁移的数据库名。

十、在线迁移性能对比测试

和开源ETL工具Kettle进行对比测试。

由于本人测试条件有限(所有的数据库和工具都部署在一个虚机里),如果大家有条件可以在性能更好的环境下测试,迁移效率肯定会比下面的结果更好。

1、性能测试对比表格

|------------------|---------------------------|------------------------|-------------------|
| 工具名\迁移项(单位:行/秒) | Gbase8a -> Gbase8a | PostgreSql -> Gbase8a | PostgreSql -> Dm |
| HappySunshine | 43690(INSERT) 98304(LOAD) | 43690 | 78643 |
| Kettle | 3215 | 2964 | 20837 |

2、测试表结构

(1)Gbase8a

sql 复制代码
gbase> DESC ZXJ.TESTTAB;
+-------+---------------+------+-----+-------------------+-----------------------------+
| Field | Type          | Null | Key | Default           | Extra                       |
+-------+---------------+------+-----+-------------------+-----------------------------+
| a     | int(11)       | YES  |     | NULL              |                             |
| b     | double        | YES  |     | NULL              |                             |
| c     | varchar(100)  | YES  | MUL | NULL              |                             |
| d     | text          | YES  |     | NULL              |                             |
| e     | blob          | YES  |     | NULL              |                             |
| f     | longblob      | YES  |     | NULL              |                             |
| g     | date          | YES  |     | NULL              |                             |
| h     | timestamp     | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
| i     | decimal(10,2) | YES  |     | NULL              |                             |
+-------+---------------+------+-----+-------------------+-----------------------------+
9 rows in set (Elapsed: 00:00:00.00)

(2)DM

sql 复制代码
SQL> DESC ZXJ.TESTTAB;

行号     NAME TYPE$        NULLABLE
---------- ---- ------------ --------
1          A    INTEGER      Y
2          B    DOUBLE       Y
3          C    VARCHAR(100) Y
4          D    TEXT         Y
5          E    BLOB         Y
6          F    BLOB         Y
7          G    DATE         Y
8          H    DATETIME(6)  Y
9          I    DEC(10, 2)   Y

9 rows got

(3)PG

sql 复制代码
czg=# \d public.testtab
                                      Table "public.testtab"
 Column |            Type             | Collation | Nullable |              Default               
--------+-----------------------------+-----------+----------+------------------------------------
 a      | integer                     |           | not null | nextval('testtab_a_seq'::regclass)
 b      | double precision            |           |          | 
 c      | character varying(100)      |           |          | 
 d      | text                        |           |          | 
 e      | bytea                       |           |          | 
 f      | bytea                       |           |          | 
 g      | date                        |           |          | 
 h      | timestamp without time zone |           |          | 
 i      | numeric(10,2)               |           |          | 
Indexes:
    "testtab_pkey" PRIMARY KEY, btree (a)

3、测试数据样式

sql 复制代码
czg=# SELECT * FROM PUBLIC.TESTTAB LIMIT 10;
    a    |  b  |      c      |    d     |       e        |             f              |     g      |          h          |    i    
---------+-----+-------------+----------+----------------+----------------------------+------------+---------------------+---------
 2399798 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |        
 2399799 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |    0.00
 2399800 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |    8.80
 2399801 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |   -8.80
 2399802 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |  348.80
 2399803 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 | -348.80
 2399804 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |        
 2399805 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |    0.00
 2399806 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |    8.80
 2399807 | 2.1 | LXG'ZXJ|CLX | HAHHAHAH | \x414141414141 | \x424242424242424242424242 | 2024-08-19 | 2024-08-19 00:00:00 |   -8.80
(10 rows)

4、HappySunshine测试截图

(1)PostgreSql -> Dm

(2)PostgreSql -> Gbase8a

(3)Gbase8a-> Gbase8a

INSERT

LOAD

5、Kettle测试截图

(1)PG -> Dm

测试步骤大家可以参考之前写的博客《Kettle-学习-03-PostgreSql迁移至达梦DM

(2)PG -> Gbase8a

测试步骤大家可以参考之前写的博客《Kettle-学习-02-PostgreSql迁移至Gbase8a

(3)Gbase8a-> Gbase8a

测试步骤大家可以参考之前写的博客《Kettle-学习-01-Gbase8a迁移至Gbase8a

十一、PG离线抽取功能与性能

1、功能展示

(1)单库级抽取示例

bash 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# ./HsPgUnload /opt/Pg14-5/Data/base/13892/ /home/czg/TestPgData/ 8192 '*' '*' 3 2
2026-06-22 20:55:31.460275-P[131021]-T[131021]-[Info ]-HsLogo             : 
 █░  █░  ███░  ████░  ████░  █░    █░  ███░  █░  █░ █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 █░  █░ █░  █░ █░  █░ █░  █░  █░  █░  █░  █░ █░  █░ ██░ █░ █░  █░ █░  █░  █░ ██░ █░ █░    
 █░  █░ █░  █░ █░  █░ █░  █░   █░█░   █░     █░  █░ █░█░█░ █░     █░  █░  █░ █░█░█░ █░    
 █████░ █████░ ████░  ████░     █░     ███░  █░  █░ █░ ██░  ███░  █████░  █░ █░ ██░ ████░ 
 █░  █░ █░  █░ █░     █░        █░        █░ █░  █░ █░  █░     █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░    █░  █░ █░  █░ █░  █░ █░  █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░     ███░   ███░  █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 
Contact Information:
     1.QQ     : 2263143197 
     2.WeChat : Ldqczgsun 
     3.Email  : 2263143197@qq.com 
     4.Github : https://github.com/lxgczg/HappySunshine 
     5.CSDN   : https://blog.csdn.net/qq_45111959?type=lately 

2026-06-22 20:55:31.461033-P[131021]-T[131021]-[Info ]-HsLicCheck         : OK, Version : 'HappySunshineV1.7', Flag : 'Pro', ExpireTime : '2027-05-17'.
2026-06-22 20:55:31.461056-P[131021]-T[131021]-[Info ]-main               : OK, DataDir : '/opt/Pg14-5/Data/base/13892/', UnloadDir : '/home/czg/TestPgData/', PageSize : 8192, Sch : '*', Tab : '*', WkrNums : 3, LOG_LEVEL : 'Info '.
2026-06-22 20:55:31.461828-P[131021]-T[131021]-[Info ]-PgGlbEnvInit       : OK, WritePages : 2, WriteBlockSize : 8192, PgSchMark : BT, PgClassMark : BT, PgAttrMark : BT, PgEnumMark : BT, PgTypeMark : BT.
2026-06-22 20:55:31.482150-P[131021]-T[131021]-[Info ]-PgFileNodeMap      : OK, FilePath : '/opt/Pg14-5/Data/base/13892/pg_filenode.map', num_mappings : 17, PgClassOid : 171368, PgAttrOid : 170960, PgTypeOid : 171261.
2026-06-22 20:55:31.484813-P[131021]-T[131021]-[Info ]-PgTypeDecode       : OK, Sch : pg_catalog     , Tab : pg_type             , Time :     0.000 (s.ms).
2026-06-22 20:55:31.485987-P[131021]-T[131021]-[Info ]-PgClassDecode      : OK, Sch : pg_catalog     , Tab : pg_class            , Time :     0.001 (s.ms).
2026-06-22 20:55:31.486112-P[131021]-T[131021]-[Info ]-PgSchDecode        : OK, Sch : pg_catalog     , Tab : pg_namespace        , Time :     0.000 (s.ms).
2026-06-22 20:55:31.491625-P[131021]-T[131021]-[Info ]-PgAttrDecode       : OK, Sch : pg_catalog     , Tab : pg_attribute        , Time :     0.005 (s.ms).
2026-06-22 20:55:31.491928-P[131021]-T[131021]-[Info ]-PgEnumDecode       : OK, Sch : pg_catalog     , Tab : pg_enum             , Time :     0.000 (s.ms).
2026-06-22 20:55:31.492032-P[131021]-T[131021]-[Info ]-CllPrint           : 
[ ('public' ,'actor' ),('public' ,'address' ),('public' ,'blue' ),('public' ,'category' ),('public' ,'child' ) ]
[ ('public' ,'city' ),('public' ,'clx' ),('public' ,'country' ),('public' ,'customer' ),('public' ,'czg' ) ]
[ ('public' ,'father1' ),('public' ,'father2' ),('public' ,'father3' ),('public' ,'film_actor' ),('public' ,'film_category' ) ]
[ ('public' ,'hstest' ),('public' ,'ice' ),('public' ,'inventory' ),('public' ,'language' ),('public' ,'ldq' ) ]
[ ('public' ,'lxg' ),('public' ,'lzl' ),('public' ,'moon' ),('public' ,'orders_2024_q1' ),('public' ,'orders_2024_q2' ) ]
[ ('public' ,'orders_2024_q3' ),('public' ,'orders_2024_q4' ),('public' ,'orders_range' ),('public' ,'payment' ),('public' ,'payment_p2022_01' ) ]
[ ('public' ,'payment_p2022_02' ),('public' ,'payment_p2022_03' ),('public' ,'payment_p2022_04' ),('public' ,'payment_p2022_05' ),('public' ,'payment_p2022_06' ) ]
[ ('public' ,'payment_p2022_07' ),('public' ,'pgbench_accounts' ),('public' ,'pgbench_branches' ),('public' ,'pgbench_history' ),('public' ,'pgbench_tellers' ) ]
[ ('public' ,'rental' ),('public' ,'staff' ),('public' ,'store' ),('public' ,'sun' ),('public' ,'sun1' ) ]
[ ('public' ,'xxx' ),('public' ,'yyy' ),('public' ,'zxj' ),('sun' ,'sun' ) ]
2026-06-22 20:55:31.492161-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : actor               , Time :     0.000 (s.ms).
2026-06-22 20:55:31.493198-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : actor               , Time :     0.000 (s.ms).
2026-06-22 20:55:31.493375-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : address             , Time :     0.000 (s.ms).
2026-06-22 20:55:31.494652-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : address             , Time :     0.001 (s.ms).
2026-06-22 20:55:31.494686-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : blue                , Time :     0.000 (s.ms).
2026-06-22 20:55:33.060623-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : blue                , Time :     1.565 (s.ms).
2026-06-22 20:55:33.060698-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : category            , Time :     0.000 (s.ms).
2026-06-22 20:55:33.156546-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : category            , Time :     0.095 (s.ms).
2026-06-22 20:55:33.156625-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : child               , Time :     0.000 (s.ms).
2026-06-22 20:55:33.158109-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : child               , Time :     0.001 (s.ms).
2026-06-22 20:55:33.158183-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : city                , Time :     0.000 (s.ms).
2026-06-22 20:55:33.158938-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : city                , Time :     0.000 (s.ms).
2026-06-22 20:55:33.158980-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : clx                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.350180-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : clx                 , Time :     0.191 (s.ms).
2026-06-22 20:55:33.350259-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : country             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.352747-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : country             , Time :     0.002 (s.ms).
2026-06-22 20:55:33.352793-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : customer            , Time :     0.000 (s.ms).
2026-06-22 20:55:33.353933-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : customer            , Time :     0.001 (s.ms).
2026-06-22 20:55:33.353994-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : czg                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.354544-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : czg                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.354570-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : father1             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.356360-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : father1             , Time :     0.001 (s.ms).
2026-06-22 20:55:33.356416-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : father2             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.356760-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : father2             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.356800-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : father3             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.357053-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : father3             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.357089-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : film_actor          , Time :     0.000 (s.ms).
2026-06-22 20:55:33.360446-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : film_actor          , Time :     0.003 (s.ms).
2026-06-22 20:55:33.360502-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : film_category       , Time :     0.000 (s.ms).
2026-06-22 20:55:33.367365-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : film_category       , Time :     0.001 (s.ms).
2026-06-22 20:55:33.367427-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : hstest              , Time :     0.000 (s.ms).
2026-06-22 20:55:33.368349-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : hstest              , Time :     0.000 (s.ms).
2026-06-22 20:55:33.368432-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : ice                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.369799-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : ice                 , Time :     0.001 (s.ms).
2026-06-22 20:55:33.369858-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : inventory           , Time :     0.000 (s.ms).
2026-06-22 20:55:33.373047-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : inventory           , Time :     0.003 (s.ms).
2026-06-22 20:55:33.373104-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : language            , Time :     0.000 (s.ms).
2026-06-22 20:55:33.374435-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : language            , Time :     0.001 (s.ms).
2026-06-22 20:55:33.374506-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : ldq                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.375055-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : ldq                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.375127-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : lxg                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.375415-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : lxg                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.375444-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : lzl                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.375644-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : lzl                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.375797-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : moon                , Time :     0.000 (s.ms).
2026-06-22 20:55:33.430496-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : moon                , Time :     0.054 (s.ms).
2026-06-22 20:55:33.430589-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q1      , Time :     0.000 (s.ms).
2026-06-22 20:55:33.431294-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q1      , Time :     0.000 (s.ms).
2026-06-22 20:55:33.431351-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q2      , Time :     0.000 (s.ms).
2026-06-22 20:55:33.432611-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q2      , Time :     0.001 (s.ms).
2026-06-22 20:55:33.432648-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q3      , Time :     0.000 (s.ms).
2026-06-22 20:55:33.433335-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q3      , Time :     0.000 (s.ms).
2026-06-22 20:55:33.433373-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q4      , Time :     0.000 (s.ms).
2026-06-22 20:55:33.435060-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q4      , Time :     0.001 (s.ms).
2026-06-22 20:55:33.435084-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_range        , Time :     0.000 (s.ms).
2026-06-22 20:55:33.435107-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_range        , Partitioned main table does not store data, and sub-tables will be parsed normally.
2026-06-22 20:55:33.435115-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment             , Time :     0.000 (s.ms).
2026-06-22 20:55:33.435125-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment             , Partitioned main table does not store data, and sub-tables will be parsed normally.
2026-06-22 20:55:33.435131-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_01    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.435893-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_01    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.435930-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_02    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.437246-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_02    , Time :     0.001 (s.ms).
2026-06-22 20:55:33.437304-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_03    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.440713-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_03    , Time :     0.003 (s.ms).
2026-06-22 20:55:33.440793-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_04    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.443292-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_04    , Time :     0.002 (s.ms).
2026-06-22 20:55:33.443334-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_05    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.446033-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_05    , Time :     0.002 (s.ms).
2026-06-22 20:55:33.446068-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_06    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.448764-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_06    , Time :     0.002 (s.ms).
2026-06-22 20:55:33.448865-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_07    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.451110-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_07    , Time :     0.002 (s.ms).
2026-06-22 20:55:33.451155-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.899881-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.448 (s.ms).
2026-06-22 20:55:33.899949-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_branches    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.900217-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_branches    , Time :     0.000 (s.ms).
2026-06-22 20:55:33.900249-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_history     , Time :     0.000 (s.ms).
2026-06-22 20:55:33.900538-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_history     , Time :     0.000 (s.ms).
2026-06-22 20:55:33.900593-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_tellers     , Time :     0.000 (s.ms).
2026-06-22 20:55:33.901082-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_tellers     , Time :     0.000 (s.ms).
2026-06-22 20:55:33.901134-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : rental              , Time :     0.000 (s.ms).
2026-06-22 20:55:33.922160-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : rental              , Time :     0.020 (s.ms).
2026-06-22 20:55:33.922210-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : staff               , Time :     0.000 (s.ms).
2026-06-22 20:55:33.924641-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : staff               , Time :     0.002 (s.ms).
2026-06-22 20:55:33.924845-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : store               , Time :     0.000 (s.ms).
2026-06-22 20:55:33.926048-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : store               , Time :     0.001 (s.ms).
2026-06-22 20:55:33.926137-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : sun                 , Time :     0.000 (s.ms).
2026-06-22 20:55:33.934825-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : sun                 , Time :     0.008 (s.ms).
2026-06-22 20:55:33.934939-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : sun1                , Time :     0.000 (s.ms).
2026-06-22 20:55:33.950466-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : sun1                , Time :     0.015 (s.ms).
2026-06-22 20:55:33.950748-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : xxx                 , Time :     0.000 (s.ms).
2026-06-22 20:55:34.361543-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : xxx                 , Time :     0.410 (s.ms).
2026-06-22 20:55:34.361627-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : yyy                 , Time :     0.000 (s.ms).
2026-06-22 20:55:34.406950-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : yyy                 , Time :     0.045 (s.ms).
2026-06-22 20:55:34.407031-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : zxj                 , Time :     0.000 (s.ms).
2026-06-22 20:55:34.408488-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : zxj                 , Time :     0.001 (s.ms).
2026-06-22 20:55:34.408594-P[131021]-T[131021]-[Info ]-PgTabDef           : OK, Sch : sun            , Tab : sun                 , Time :     0.000 (s.ms).
2026-06-22 20:55:34.445364-P[131021]-T[131021]-[Info ]-PgTabDecode        : OK, Sch : sun            , Tab : sun                 , Time :     0.036 (s.ms).
2026-06-22 20:55:36.487934-P[131021]-T[131021]-[Info ]-main               : OK, Task completed, Time :     5.027 (s.ms).

(2)模式级抽取示例

bash 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# ./HsPgUnload /opt/Pg14-5/Data/base/13892/ /home/czg/TestPgData/ 8192 'public' '*' 3 2
2026-06-22 20:56:28.313436-P[478]-T[478]-[Info ]-HsLogo             : 
 █░  █░  ███░  ████░  ████░  █░    █░  ███░  █░  █░ █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 █░  █░ █░  █░ █░  █░ █░  █░  █░  █░  █░  █░ █░  █░ ██░ █░ █░  █░ █░  █░  █░ ██░ █░ █░    
 █░  █░ █░  █░ █░  █░ █░  █░   █░█░   █░     █░  █░ █░█░█░ █░     █░  █░  █░ █░█░█░ █░    
 █████░ █████░ ████░  ████░     █░     ███░  █░  █░ █░ ██░  ███░  █████░  █░ █░ ██░ ████░ 
 █░  █░ █░  █░ █░     █░        █░        █░ █░  █░ █░  █░     █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░    █░  █░ █░  █░ █░  █░ █░  █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░     ███░   ███░  █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 
Contact Information:
     1.QQ     : 2263143197 
     2.WeChat : Ldqczgsun 
     3.Email  : 2263143197@qq.com 
     4.Github : https://github.com/lxgczg/HappySunshine 
     5.CSDN   : https://blog.csdn.net/qq_45111959?type=lately 

2026-06-22 20:56:28.314811-P[478]-T[478]-[Info ]-HsLicCheck         : OK, Version : 'HappySunshineV1.7', Flag : 'Pro', ExpireTime : '2027-05-17'.
2026-06-22 20:56:28.314842-P[478]-T[478]-[Info ]-main               : OK, DataDir : '/opt/Pg14-5/Data/base/13892/', UnloadDir : '/home/czg/TestPgData/', PageSize : 8192, Sch : 'public', Tab : '*', WkrNums : 3, LOG_LEVEL : 'Info '.
2026-06-22 20:56:28.315963-P[478]-T[478]-[Info ]-PgGlbEnvInit       : OK, WritePages : 2, WriteBlockSize : 8192, PgSchMark : BT, PgClassMark : BT, PgAttrMark : BT, PgEnumMark : BT, PgTypeMark : BT.
2026-06-22 20:56:28.336318-P[478]-T[478]-[Info ]-PgFileNodeMap      : OK, FilePath : '/opt/Pg14-5/Data/base/13892/pg_filenode.map', num_mappings : 17, PgClassOid : 171368, PgAttrOid : 170960, PgTypeOid : 171261.
2026-06-22 20:56:28.339945-P[478]-T[478]-[Info ]-PgTypeDecode       : OK, Sch : pg_catalog     , Tab : pg_type             , Time :     0.000 (s.ms).
2026-06-22 20:56:28.341137-P[478]-T[478]-[Info ]-PgClassDecode      : OK, Sch : pg_catalog     , Tab : pg_class            , Time :     0.001 (s.ms).
2026-06-22 20:56:28.341242-P[478]-T[478]-[Info ]-PgSchDecode        : OK, Sch : pg_catalog     , Tab : pg_namespace        , Time :     0.000 (s.ms).
2026-06-22 20:56:28.347241-P[478]-T[478]-[Info ]-PgAttrDecode       : OK, Sch : pg_catalog     , Tab : pg_attribute        , Time :     0.005 (s.ms).
2026-06-22 20:56:28.347610-P[478]-T[478]-[Info ]-PgEnumDecode       : OK, Sch : pg_catalog     , Tab : pg_enum             , Time :     0.000 (s.ms).
2026-06-22 20:56:28.347715-P[478]-T[478]-[Info ]-CllPrint           : 
[ ('public' ,'actor' ),('public' ,'address' ),('public' ,'blue' ),('public' ,'category' ),('public' ,'child' ) ]
[ ('public' ,'city' ),('public' ,'clx' ),('public' ,'country' ),('public' ,'customer' ),('public' ,'czg' ) ]
[ ('public' ,'father1' ),('public' ,'father2' ),('public' ,'father3' ),('public' ,'film_actor' ),('public' ,'film_category' ) ]
[ ('public' ,'hstest' ),('public' ,'ice' ),('public' ,'inventory' ),('public' ,'language' ),('public' ,'ldq' ) ]
[ ('public' ,'lxg' ),('public' ,'lzl' ),('public' ,'moon' ),('public' ,'orders_2024_q1' ),('public' ,'orders_2024_q2' ) ]
[ ('public' ,'orders_2024_q3' ),('public' ,'orders_2024_q4' ),('public' ,'orders_range' ),('public' ,'payment' ),('public' ,'payment_p2022_01' ) ]
[ ('public' ,'payment_p2022_02' ),('public' ,'payment_p2022_03' ),('public' ,'payment_p2022_04' ),('public' ,'payment_p2022_05' ),('public' ,'payment_p2022_06' ) ]
[ ('public' ,'payment_p2022_07' ),('public' ,'pgbench_accounts' ),('public' ,'pgbench_branches' ),('public' ,'pgbench_history' ),('public' ,'pgbench_tellers' ) ]
[ ('public' ,'rental' ),('public' ,'staff' ),('public' ,'store' ),('public' ,'sun' ),('public' ,'sun1' ) ]
[ ('public' ,'xxx' ),('public' ,'yyy' ),('public' ,'zxj' ) ]
2026-06-22 20:56:28.347913-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : actor               , Time :     0.000 (s.ms).
2026-06-22 20:56:28.348757-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : actor               , Time :     0.000 (s.ms).
2026-06-22 20:56:28.348791-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : address             , Time :     0.000 (s.ms).
2026-06-22 20:56:28.349608-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : address             , Time :     0.000 (s.ms).
2026-06-22 20:56:28.349653-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : blue                , Time :     0.000 (s.ms).
2026-06-22 20:56:29.930696-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : blue                , Time :     1.580 (s.ms).
2026-06-22 20:56:29.930797-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : category            , Time :     0.000 (s.ms).
2026-06-22 20:56:30.016452-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : category            , Time :     0.085 (s.ms).
2026-06-22 20:56:30.016665-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : child               , Time :     0.000 (s.ms).
2026-06-22 20:56:30.017093-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : child               , Time :     0.000 (s.ms).
2026-06-22 20:56:30.017125-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : city                , Time :     0.000 (s.ms).
2026-06-22 20:56:30.018496-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : city                , Time :     0.001 (s.ms).
2026-06-22 20:56:30.018551-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : clx                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.230268-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : clx                 , Time :     0.211 (s.ms).
2026-06-22 20:56:30.230379-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : country             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.232766-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : country             , Time :     0.002 (s.ms).
2026-06-22 20:56:30.232808-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : customer            , Time :     0.000 (s.ms).
2026-06-22 20:56:30.234077-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : customer            , Time :     0.001 (s.ms).
2026-06-22 20:56:30.234099-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : czg                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.234838-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : czg                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.234871-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : father1             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.235133-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : father1             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.235161-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : father2             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.235784-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : father2             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.235833-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : father3             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.236269-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : father3             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.236322-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : film_actor          , Time :     0.000 (s.ms).
2026-06-22 20:56:30.238566-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : film_actor          , Time :     0.002 (s.ms).
2026-06-22 20:56:30.238607-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : film_category       , Time :     0.000 (s.ms).
2026-06-22 20:56:30.245393-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : film_category       , Time :     0.001 (s.ms).
2026-06-22 20:56:30.245468-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : hstest              , Time :     0.000 (s.ms).
2026-06-22 20:56:30.252688-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : hstest              , Time :     0.007 (s.ms).
2026-06-22 20:56:30.252803-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : ice                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.253368-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : ice                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.253433-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : inventory           , Time :     0.000 (s.ms).
2026-06-22 20:56:30.257154-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : inventory           , Time :     0.003 (s.ms).
2026-06-22 20:56:30.257210-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : language            , Time :     0.000 (s.ms).
2026-06-22 20:56:30.257739-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : language            , Time :     0.000 (s.ms).
2026-06-22 20:56:30.257813-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : ldq                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.258585-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : ldq                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.258678-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : lxg                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.259666-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : lxg                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.259699-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : lzl                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.260335-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : lzl                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.260400-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : moon                , Time :     0.000 (s.ms).
2026-06-22 20:56:30.322566-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : moon                , Time :     0.062 (s.ms).
2026-06-22 20:56:30.322656-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q1      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.323306-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q1      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.323358-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q2      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.323898-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q2      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.323945-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q3      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.324535-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q3      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.324559-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_2024_q4      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.325332-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_2024_q4      , Time :     0.000 (s.ms).
2026-06-22 20:56:30.325388-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : orders_range        , Time :     0.000 (s.ms).
2026-06-22 20:56:30.325434-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : orders_range        , Partitioned main table does not store data, and sub-tables will be parsed normally.
2026-06-22 20:56:30.325449-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment             , Time :     0.000 (s.ms).
2026-06-22 20:56:30.325468-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment             , Partitioned main table does not store data, and sub-tables will be parsed normally.
2026-06-22 20:56:30.325484-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_01    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.328100-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_01    , Time :     0.002 (s.ms).
2026-06-22 20:56:30.328206-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_02    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.331016-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_02    , Time :     0.002 (s.ms).
2026-06-22 20:56:30.331100-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_03    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.334864-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_03    , Time :     0.003 (s.ms).
2026-06-22 20:56:30.334957-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_04    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.336858-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_04    , Time :     0.001 (s.ms).
2026-06-22 20:56:30.336922-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_05    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.339673-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_05    , Time :     0.002 (s.ms).
2026-06-22 20:56:30.339826-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_06    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.342433-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_06    , Time :     0.002 (s.ms).
2026-06-22 20:56:30.342486-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : payment_p2022_07    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.343636-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : payment_p2022_07    , Time :     0.001 (s.ms).
2026-06-22 20:56:30.343680-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.790608-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.446 (s.ms).
2026-06-22 20:56:30.790684-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_branches    , Time :     0.000 (s.ms).
2026-06-22 20:56:30.793024-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_branches    , Time :     0.002 (s.ms).
2026-06-22 20:56:30.793099-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_history     , Time :     0.000 (s.ms).
2026-06-22 20:56:30.793970-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_history     , Time :     0.000 (s.ms).
2026-06-22 20:56:30.794043-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_tellers     , Time :     0.000 (s.ms).
2026-06-22 20:56:30.796595-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_tellers     , Time :     0.002 (s.ms).
2026-06-22 20:56:30.796707-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : rental              , Time :     0.000 (s.ms).
2026-06-22 20:56:30.816901-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : rental              , Time :     0.020 (s.ms).
2026-06-22 20:56:30.817199-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : staff               , Time :     0.000 (s.ms).
2026-06-22 20:56:30.821627-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : staff               , Time :     0.004 (s.ms).
2026-06-22 20:56:30.821702-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : store               , Time :     0.000 (s.ms).
2026-06-22 20:56:30.823582-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : store               , Time :     0.001 (s.ms).
2026-06-22 20:56:30.823673-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : sun                 , Time :     0.000 (s.ms).
2026-06-22 20:56:30.831629-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : sun                 , Time :     0.007 (s.ms).
2026-06-22 20:56:30.831752-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : sun1                , Time :     0.000 (s.ms).
2026-06-22 20:56:30.844659-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : sun1                , Time :     0.012 (s.ms).
2026-06-22 20:56:30.844906-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : xxx                 , Time :     0.000 (s.ms).
2026-06-22 20:56:31.234882-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : xxx                 , Time :     0.389 (s.ms).
2026-06-22 20:56:31.235033-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : yyy                 , Time :     0.000 (s.ms).
2026-06-22 20:56:31.275336-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : yyy                 , Time :     0.040 (s.ms).
2026-06-22 20:56:31.275492-P[478]-T[478]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : zxj                 , Time :     0.000 (s.ms).
2026-06-22 20:56:31.276592-P[478]-T[478]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : zxj                 , Time :     0.001 (s.ms).
2026-06-22 20:56:33.314427-P[478]-T[478]-[Info ]-main               : OK, Task completed, Time :     5.001 (s.ms).

(3)表级抽取示例

bash 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# ./HsPgUnload /opt/Pg14-5/Data/base/13892/ /home/czg/TestPgData/ 8192 'public' 'blue' 3 2
2026-06-22 20:58:52.076436-P[576]-T[576]-[Info ]-HsLogo             : 
 █░  █░  ███░  ████░  ████░  █░    █░  ███░  █░  █░ █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 █░  █░ █░  █░ █░  █░ █░  █░  █░  █░  █░  █░ █░  █░ ██░ █░ █░  █░ █░  █░  █░ ██░ █░ █░    
 █░  █░ █░  █░ █░  █░ █░  █░   █░█░   █░     █░  █░ █░█░█░ █░     █░  █░  █░ █░█░█░ █░    
 █████░ █████░ ████░  ████░     █░     ███░  █░  █░ █░ ██░  ███░  █████░  █░ █░ ██░ ████░ 
 █░  █░ █░  █░ █░     █░        █░        █░ █░  █░ █░  █░     █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░    █░  █░ █░  █░ █░  █░ █░  █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░     ███░   ███░  █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 
Contact Information:
     1.QQ     : 2263143197 
     2.WeChat : Ldqczgsun 
     3.Email  : 2263143197@qq.com 
     4.Github : https://github.com/lxgczg/HappySunshine 
     5.CSDN   : https://blog.csdn.net/qq_45111959?type=lately 

2026-06-22 20:58:52.077187-P[576]-T[576]-[Info ]-HsLicCheck         : OK, Version : 'HappySunshineV1.7', Flag : 'Pro', ExpireTime : '2027-05-17'.
2026-06-22 20:58:52.077198-P[576]-T[576]-[Info ]-main               : OK, DataDir : '/opt/Pg14-5/Data/base/13892/', UnloadDir : '/home/czg/TestPgData/', PageSize : 8192, Sch : 'public', Tab : 'blue', WkrNums : 3, LOG_LEVEL : 'Info '.
2026-06-22 20:58:52.077902-P[576]-T[576]-[Info ]-PgGlbEnvInit       : OK, WritePages : 2, WriteBlockSize : 8192, PgSchMark : BT, PgClassMark : BT, PgAttrMark : BT, PgEnumMark : BT, PgTypeMark : BT.
2026-06-22 20:58:52.096721-P[576]-T[576]-[Info ]-PgFileNodeMap      : OK, FilePath : '/opt/Pg14-5/Data/base/13892/pg_filenode.map', num_mappings : 17, PgClassOid : 171368, PgAttrOid : 170960, PgTypeOid : 171261.
2026-06-22 20:58:52.100531-P[576]-T[576]-[Info ]-PgTypeDecode       : OK, Sch : pg_catalog     , Tab : pg_type             , Time :     0.000 (s.ms).
2026-06-22 20:58:52.101681-P[576]-T[576]-[Info ]-PgClassDecode      : OK, Sch : pg_catalog     , Tab : pg_class            , Time :     0.001 (s.ms).
2026-06-22 20:58:52.101748-P[576]-T[576]-[Info ]-PgSchDecode        : OK, Sch : pg_catalog     , Tab : pg_namespace        , Time :     0.000 (s.ms).
2026-06-22 20:58:52.107228-P[576]-T[576]-[Info ]-PgAttrDecode       : OK, Sch : pg_catalog     , Tab : pg_attribute        , Time :     0.005 (s.ms).
2026-06-22 20:58:52.107556-P[576]-T[576]-[Info ]-PgEnumDecode       : OK, Sch : pg_catalog     , Tab : pg_enum             , Time :     0.000 (s.ms).
2026-06-22 20:58:52.107632-P[576]-T[576]-[Info ]-CllPrint           : 
[ ('public' ,'blue' ) ]
2026-06-22 20:58:52.107770-P[576]-T[576]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : blue                , Time :     0.000 (s.ms).
2026-06-22 20:58:53.610242-P[576]-T[576]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : blue                , Time :     1.502 (s.ms).
2026-06-22 20:58:55.626078-P[576]-T[576]-[Info ]-main               : OK, Task completed, Time :     3.549 (s.ms).

(4)数据加载示例

sql 复制代码
COPY MOON FROM '/home/czg/TestPgData/public_sun.txt' WITH (FORMAT CSV,DELIMITER '|',NULL '',QUOTE '"',ESCAPE '\');

(5)抽取的表定义展示

sql 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# cat /home/czg/TestPgData/PG_DDL.txt
CREATE TABLE public.pgbench_accounts 
(
"aid" INT NOT NULL,
"bid" INT,
"abalance" INT,
"filler" CHAR(84)
);

(6)抽取的数据展示

sql 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# tail -10f /home/czg/TestPgData/public_pgbench_accounts/public_pgbench_accounts.txt_0
999991|10|0|                                                                                    
999992|10|0|                                                                                    
999993|10|0|                                                                                    
999994|10|0|                                                                                    
999995|10|0|                                                                                    
999996|10|0|                                                                                    
999997|10|0|                                                                                    
999998|10|0|                                                                                    
999999|10|0|                                                                                    
1000000|10|0|

(7)库内查询展示

sql 复制代码
postgres=# SELECT * FROM pgbench_accounts WHERE AID >= 999991 ORDER BY AID LIMIT 10;
   aid   | bid | abalance |                                        filler                                        
---------+-----+----------+--------------------------------------------------------------------------------------
  999991 |  10 |        0 |                                                                                     
  999992 |  10 |        0 |                                                                                     
  999993 |  10 |        0 |                                                                                     
  999994 |  10 |        0 |                                                                                     
  999995 |  10 |        0 |                                                                                     
  999996 |  10 |        0 |                                                                                     
  999997 |  10 |        0 |                                                                                     
  999998 |  10 |        0 |                                                                                     
  999999 |  10 |        0 |                                                                                     
 1000000 |  10 |        0 |                                                                                     
(10 rows)

2、性能展示

(1)表结构

sql 复制代码
postgres=# \d pgbench_accounts
              Table "public.pgbench_accounts"
  Column  |     Type      | Collation | Nullable | Default 
----------+---------------+-----------+----------+---------
 aid      | integer       |           | not null | 
 bid      | integer       |           |          | 
 abalance | integer       |           |          | 
 filler   | character(84) |           |          | 
Indexes:
    "pgbench_accounts_pkey" PRIMARY KEY, btree (aid)

(2)数据量

sql 复制代码
postgres=# SELECT COUNT(*) FROM pgbench_accounts;
  count  
---------
 1000000
(1 row)

(3)单线程离线抽取

bash 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# ./HsPgUnload /opt/Pg14-5/Data/base/13892/ /home/czg/TestPgData/ 8192 'public' 'pgbench_accounts' 1 2
2026-06-23 20:58:06.112844-P[64814]-T[64814]-[Info ]-HsLogo             : 
 █░  █░  ███░  ████░  ████░  █░    █░  ███░  █░  █░ █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 █░  █░ █░  █░ █░  █░ █░  █░  █░  █░  █░  █░ █░  █░ ██░ █░ █░  █░ █░  █░  █░ ██░ █░ █░    
 █░  █░ █░  █░ █░  █░ █░  █░   █░█░   █░     █░  █░ █░█░█░ █░     █░  █░  █░ █░█░█░ █░    
 █████░ █████░ ████░  ████░     █░     ███░  █░  █░ █░ ██░  ███░  █████░  █░ █░ ██░ ████░ 
 █░  █░ █░  █░ █░     █░        █░        █░ █░  █░ █░  █░     █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░    █░  █░ █░  █░ █░  █░ █░  █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░     ███░   ███░  █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 
Contact Information:
     1.QQ     : 2263143197 
     2.WeChat : Ldqczgsun 
     3.Email  : 2263143197@qq.com 
     4.Github : https://github.com/lxgczg/HappySunshine 
     5.CSDN   : https://blog.csdn.net/qq_45111959?type=lately 

2026-06-23 20:58:06.114343-P[64814]-T[64814]-[Info ]-HsLicCheck         : OK, Version : 'HappySunshineV1.7', Flag : 'Pro', ExpireTime : '2027-05-17'.
2026-06-23 20:58:06.114373-P[64814]-T[64814]-[Info ]-main               : OK, DataDir : '/opt/Pg14-5/Data/base/13892/', UnloadDir : '/home/czg/TestPgData/', PageSize : 8192, Sch : 'public', Tab : 'pgbench_accounts', WkrNums : 1, LOG_LEVEL : 'Info '.
2026-06-23 20:58:06.114863-P[64814]-T[64814]-[Info ]-PgGlbEnvInit       : OK, WritePages : 2, WriteBlockSize : 8192, PgSchMark : BT, PgClassMark : BT, PgAttrMark : BT, PgEnumMark : BT, PgTypeMark : BT.
2026-06-23 20:58:06.140936-P[64814]-T[64814]-[Info ]-PgFileNodeMap      : OK, FilePath : '/opt/Pg14-5/Data/base/13892/pg_filenode.map', num_mappings : 17, PgClassOid : 171368, PgAttrOid : 170960, PgTypeOid : 171261.
2026-06-23 20:58:06.145296-P[64814]-T[64814]-[Info ]-PgTypeDecode       : OK, Sch : pg_catalog     , Tab : pg_type             , Time :     0.000 (s.ms).
2026-06-23 20:58:06.146163-P[64814]-T[64814]-[Info ]-PgClassDecode      : OK, Sch : pg_catalog     , Tab : pg_class            , Time :     0.000 (s.ms).
2026-06-23 20:58:06.146242-P[64814]-T[64814]-[Info ]-PgSchDecode        : OK, Sch : pg_catalog     , Tab : pg_namespace        , Time :     0.000 (s.ms).
2026-06-23 20:58:06.152375-P[64814]-T[64814]-[Info ]-PgAttrDecode       : OK, Sch : pg_catalog     , Tab : pg_attribute        , Time :     0.006 (s.ms).
2026-06-23 20:58:06.152603-P[64814]-T[64814]-[Info ]-PgEnumDecode       : OK, Sch : pg_catalog     , Tab : pg_enum             , Time :     0.000 (s.ms).
2026-06-23 20:58:06.152658-P[64814]-T[64814]-[Info ]-CllPrint           : 
[ ('public' ,'pgbench_accounts' ) ]
2026-06-23 20:58:06.152741-P[64814]-T[64814]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.000 (s.ms).
2026-06-23 20:58:07.426099-P[64814]-T[64814]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_accounts    , Time :     1.273 (s.ms).
2026-06-23 20:58:08.126278-P[64814]-T[64814]-[Info ]-main               : OK, Task completed, Time :     2.013 (s.ms).

解析需1.273 (s.ms)。

(4)多线程离线抽取

bash 复制代码
[root@dw01:/opt/Developer/ComputerLanguageStudy/C/DataStructureTestSrc/PublicFunction/PgReadData/Exec]# ./HsPgUnload /opt/Pg14-5/Data/base/13892/ /home/czg/TestPgData/ 8192 'public' 'pgbench_accounts' 4 2
2026-06-23 20:59:54.347337-P[65092]-T[65092]-[Info ]-HsLogo             : 
 █░  █░  ███░  ████░  ████░  █░    █░  ███░  █░  █░ █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 █░  █░ █░  █░ █░  █░ █░  █░  █░  █░  █░  █░ █░  █░ ██░ █░ █░  █░ █░  █░  █░ ██░ █░ █░    
 █░  █░ █░  █░ █░  █░ █░  █░   █░█░   █░     █░  █░ █░█░█░ █░     █░  █░  █░ █░█░█░ █░    
 █████░ █████░ ████░  ████░     █░     ███░  █░  █░ █░ ██░  ███░  █████░  █░ █░ ██░ ████░ 
 █░  █░ █░  █░ █░     █░        █░        █░ █░  █░ █░  █░     █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░    █░  █░ █░  █░ █░  █░ █░  █░ █░  █░  █░ █░  █░ █░    
 █░  █░ █░  █░ █░     █░        █░     ███░   ███░  █░  █░  ███░  █░  █░  █░ █░  █░ █████░
 
Contact Information:
     1.QQ     : 2263143197 
     2.WeChat : Ldqczgsun 
     3.Email  : 2263143197@qq.com 
     4.Github : https://github.com/lxgczg/HappySunshine 
     5.CSDN   : https://blog.csdn.net/qq_45111959?type=lately 

2026-06-23 20:59:54.348102-P[65092]-T[65092]-[Info ]-HsLicCheck         : OK, Version : 'HappySunshineV1.7', Flag : 'Pro', ExpireTime : '2027-05-17'.
2026-06-23 20:59:54.348126-P[65092]-T[65092]-[Info ]-main               : OK, DataDir : '/opt/Pg14-5/Data/base/13892/', UnloadDir : '/home/czg/TestPgData/', PageSize : 8192, Sch : 'public', Tab : 'pgbench_accounts', WkrNums : 4, LOG_LEVEL : 'Info '.
2026-06-23 20:59:54.349238-P[65092]-T[65092]-[Info ]-PgGlbEnvInit       : OK, WritePages : 2, WriteBlockSize : 8192, PgSchMark : BT, PgClassMark : BT, PgAttrMark : BT, PgEnumMark : BT, PgTypeMark : BT.
2026-06-23 20:59:54.373733-P[65092]-T[65092]-[Info ]-PgFileNodeMap      : OK, FilePath : '/opt/Pg14-5/Data/base/13892/pg_filenode.map', num_mappings : 17, PgClassOid : 171368, PgAttrOid : 170960, PgTypeOid : 171261.
2026-06-23 20:59:54.377481-P[65092]-T[65092]-[Info ]-PgTypeDecode       : OK, Sch : pg_catalog     , Tab : pg_type             , Time :     0.000 (s.ms).
2026-06-23 20:59:54.378638-P[65092]-T[65092]-[Info ]-PgClassDecode      : OK, Sch : pg_catalog     , Tab : pg_class            , Time :     0.001 (s.ms).
2026-06-23 20:59:54.378743-P[65092]-T[65092]-[Info ]-PgSchDecode        : OK, Sch : pg_catalog     , Tab : pg_namespace        , Time :     0.000 (s.ms).
2026-06-23 20:59:54.383320-P[65092]-T[65092]-[Info ]-PgAttrDecode       : OK, Sch : pg_catalog     , Tab : pg_attribute        , Time :     0.004 (s.ms).
2026-06-23 20:59:54.383667-P[65092]-T[65092]-[Info ]-PgEnumDecode       : OK, Sch : pg_catalog     , Tab : pg_enum             , Time :     0.000 (s.ms).
2026-06-23 20:59:54.383737-P[65092]-T[65092]-[Info ]-CllPrint           : 
[ ('public' ,'pgbench_accounts' ) ]
2026-06-23 20:59:54.383857-P[65092]-T[65092]-[Info ]-PgTabDef           : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.000 (s.ms).
2026-06-23 20:59:54.732528-P[65092]-T[65092]-[Info ]-PgTabDecode        : OK, Sch : public         , Tab : pgbench_accounts    , Time :     0.348 (s.ms).
2026-06-23 20:59:56.741239-P[65092]-T[65092]-[Info ]-main               : OK, Task completed, Time :     2.393 (s.ms).

解析需0.348 (s.ms)。

(5)包含大字段、枚举表性能对比

|----------|----------------|------|
| | 包含大字段、枚举(s.ms) | 提升倍数 |
| 单线程 | 4.472 | 2.4 |
| 多线程(3线程) | 1.830 | 2.4 |

(6)不包含大字段、枚举表性能对比

|----------|-----------------|------|
| | 不包含大字段、枚举(s.ms) | 提升倍数 |
| 单线程 | 1.273 | 3.6 |
| 多线程(3线程) | 0.348 | 3.6 |

十二、许可证

|------|--------------------------------------------------|
| 版本 | 限制 |
| Free | 1、单表数据文件大小小于100MB。 2、线程数最多支持2。 3、免费使用一年,续期请联系作者。 |
| Pro | 功能上无限制,需相应许可请联系作者。 |

十三、需求&Bug

需提供如下内容:

|----|-----------------|-------|
| 序号 | 名称 | 必要性 |
| 1 | 操作系统版本 | 必要 |
| 2 | CPU型号 | 必要 |
| 3 | HappySunshine版本 | 必要 |
| 4 | 数据库版本 | 必要 |
| 5 | 问题 | 需求 | 必要 |
| 6 | Bug复现方法 | Bug必要 |
| 7 | 报错截图 | Bug必要 |
| 8 | core文件 | Bug必要 |