测试用rust重写的postgresql: pgrust

存储库地址:https://github.com/malisper/pgrust

拉取镜像并运行容器,登录容器。

复制代码
C:\Users\lt>wsl
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker pull docker.1ms.run/malisper/pgrust
Trying to pull docker.1ms.run/malisper/pgrust:latest...
Getting image source signatures
Copying blob 7f391b878ec7 done
Copying blob f8e78f820606 done
Copying blob 18c5c781fe83 done
Copying blob 35c2c72582cc done
Copying blob 68629629b516 done
Copying blob 8b6b9b15108d done
Copying blob c1215e3a97b3 done
Copying blob 443d1ff16955 done
Copying blob 8e8e5cc347ba done
Copying blob 565ad44ed903 done
Copying blob ee7165cce1e9 done
Copying blob d3c88b0da8ce done
Copying blob 324555581bf2 done
Copying config 31bacc34e0 done
Writing manifest to image destination
Storing signatures
31bacc34e0d1c4804e81670e798d69c0a36bf9722df3815ac17c22fffa076185
root@DESKTOP-59T6U68:/mnt/c/Users/lt#

root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker run -itd --name pgrust -e POSTGRES_PASSWORD=secret docker.1ms.run/malisper/
pgrust
d9f9162dc1e4c096fe2061aaa2a48ea0577fdad5e69bee16980876a47564b05a
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker exec -it -e PGPASSWORD=secret pgrust psql -h 127.0.0.1 -U postgres
psql (18.4 (Debian 18.4-1.pgdg12+1), server 18.3)
Type "help" for help.

postgres=# select version();
                              version
-------------------------------------------------------------------
 pgrust 18.3 on x86_64-linux-gnu, compiled by clang-21.0.0, 64-bit
(1 row)

测试分组汇总性能。

复制代码
postgres=# \timing
Timing is on.

postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,100000)i) select a,sum(b)c from t group by a order by c,a limit 3;
 a  |    c
----+----------
 10 |        0
  0 | 49995000
  1 | 49995000
(3 rows)

Time: 294.691 ms
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,1000000)i) select a,sum(b)c from t group by a order by c,a limit 3;
  a  |    c
-----+----------
 100 |        0
   0 | 49995000
   1 | 49995000
(3 rows)

Time: 2313.454 ms (00:02.313)
--也支持表别名(列别名)的写法。
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,1000000)t(i)) select a,sum(b)c from t group by a order by c,a limit 3;
  a  |    c
-----+----------
 100 |        0
   0 | 49995000
   1 | 49995000
(3 rows)

Time: 2252.353 ms (00:02.252)

与PostgreSQL 17.7比较。

复制代码
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker start pg177
pg177
root@DESKTOP-59T6U68:/mnt/c/Users/lt# docker exec -it pg177 bash
root@b3490d8427cd:/# cd /par
root@b3490d8427cd:/par# psql
psql: error: connection to server on socket "/var/run/postgresql/.s.PGSQL.5432" failed: FATAL:  role "root" does not exist
root@b3490d8427cd:/par# psql -U postgres
psql (17.7 (Debian 17.7-3.pgdg13+1))
Type "help" for help.

postgres=# select version();
                                                      version
--------------------------------------------------------------------------------------------------------------------
 PostgreSQL 17.7 (Debian 17.7-3.pgdg13+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 14.2.0-19) 14.2.0, 64-bit
(1 row)

postgres=# \timing on
Timing is on.
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,100000)i) select a,sum(b)c from t group by a order by c,a limit 3;
 a  |    c
----+----------
 10 |        0
  0 | 49995000
  1 | 49995000
(3 rows)

Time: 30.019 ms
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,1000000)i) select a,sum(b)c from t group by a order by c,a limit 3;
  a  |    c
-----+----------
 100 |        0
   0 | 49995000
   1 | 49995000
(3 rows)

Time: 166.758 ms
postgres=# with t as (select i/10000 a,i%10000 b from generate_series(1,10000000)i) select a,sum(b)c from t group by a order by c,a limit 3;
  a   |    c
------+----------
 1000 |        0
    0 | 49995000
    1 | 49995000
(3 rows)

Time: 1649.096 ms (00:01.649)
postgres=#

可见,这个版本的pgrust的SQL语法和计算结果正确,但性能比postgresql差很多倍。

相关推荐
2501_948106911 小时前
计算机毕业设计之jsp-智慧旅游分享平台
java·开发语言·spark·汽车·课程设计·旅游
阿里云云原生1 小时前
Agent 不再是“玩具”!AgentScope Java 2.0 GA 发布:构建企业级分布式智能体底座
java·开发语言·分布式·agentscope
BIM云平台开发2 小时前
【App.vue里跟踪页面跳转和用户ID】
开发语言·前端·javascript
NiceCloud喜云2 小时前
ClaudeAPI 接入 n8n / Dify / Open WebUI 实战:Base URL 配置、调用示例与排错
开发语言·ai·chatgpt·aigc
庵中十三居士2 小时前
【纯AI无人工修改】AI Agent从0到1实战:50行Python手写核心循环,一次看懂所有Agent框架的底层逻辑
开发语言·人工智能·python
甄同学2 小时前
第二十篇:MCP协议集成,Claude Code如何扩展AI Agent的能力边界
开发语言·人工智能·qt
@atweiwei3 小时前
Langchainrust:中LLM-as-a-Judge,用 Rust 实现一套 LLM 评估系统
开发语言·后端·ai·rust·llm·rag
风华圆舞3 小时前
鸿蒙HarmonyOS 多模态输入实战 —— 图片与文档输入智谱/DeepSeek
开发语言·人工智能·华为·php·harmonyos·arkts·arkui
Ljwuhe3 小时前
C++——模板进阶
开发语言·c++