TPC-H是针对决策支持的基准测试,但官方尚不支持PG,本短文主要讲如何修改代码增加支持。
1、测试过程
网上可以搜到很多如何向PostgreSQL中导入测试数据的帖子,一般都是选Oracle作为数据目标,然后加工数据,手动调整SQL,最后完成测试。因为此类资料甚多,就不在这里啰嗦。
2、数据问题
默认生成的数据末尾带有分隔符(默认 |),PG是不支持的,无法直接导入,因此普遍做法是使用强大的 *nix 工具处理,也有人自己写代码处理。
tpc-h代码挺简单,有兴趣自己读一读,需要帮助的话可以联系我。
#ifdef EOL_HANDLING
if (sep)
#endif /* EOL_HANDLING */
fprintf(target, "%c", SEPARATOR);
当打开预处理符“EOL_HANDLING”时,不会在行尾输出分割符。粗暴点把这里两行 "#" 全部去掉也是可以的,至少目的达到了。
在 config.h 的注释中有关于预处理符的说明,包括:EOL_HANDLING。
3、PG支持
在 makefile.suite 中
CFLAGS= ... -D$(MACHINE) -D$(DATABASE) -D$(WORKLOAD) ...复制
也会清晰看到在编译过程中根据设置出现的日志:
... -DLINUX -DORACLE -DTPCH ...复制
既然我们选择用Oracle生成数据,也就可以在代码中参考生成PG的设置代码:
#ifdef POSTGRESQL
#define GEN_QUERY_PLAN ""
#define START_TRAN ""
#define END_TRAN ""
#define SET_OUTPUT ""
#define SET_ROWCOUNT "-- LIMIT %d;\n"
#define SET_DBASE ""
#endif复制
就是在 tpch.h 中复制一份,几乎什么都不需要设置。SET_ROWCOUNT影响语句的生成,暂时这样修改跳过。
在 config.h 中开启 EOL_HANDLING:
#ifdef POSTGRESQL
#define EOL_HANDLING
#endif /* POSTGRESQL */复制
这是一个很简单的工具,修改代码也很简单,想完整支持并且使用更加方便,还需要继续改下去。
代码提交在:
https://gitee.com/duguanshan/tpc-h
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
外国CTO也感兴趣的开源数据库项目——openHalo
小满未满、
1433次阅读
2025-04-21 16:58:09
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
383次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
369次阅读
2025-04-15 14:48:05
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
179次阅读
2025-04-14 15:58:34
中国PostgreSQL培训认证体系新增PGAI应用工程师方向
开源软件联盟PostgreSQL分会
172次阅读
2025-05-06 10:21:13
SQL 优化之 OR 子句改写
xiongcc
134次阅读
2025-04-21 00:08:06
PG生态赢得资本市场青睐:Databricks收购Neon,Supabase融资两亿美元,微软财报点名PG
老冯云数
122次阅读
2025-05-07 10:06:22
告别老旧mysql_fdw,升级正当时
NickYoung
115次阅读
2025-04-29 11:15:18
PostgreSQL的dblink扩展模块使用方法
szrsu
99次阅读
2025-04-24 17:39:30
pgsql+pgpool高可用配置示例
(*´I`*)
97次阅读
2025-04-15 10:43:30