Macro数据库设计全解:Postgres + sqlx编译时检查 + 297个迁移文件

发布时间:2026/11/12 12:24:32

Macro数据库设计全解:Postgres + sqlx编译时检查 + 297个迁移文件 Macro数据库设计全解Postgres sqlx编译时检查 297个迁移文件【免费下载链接】macroMacro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — -linked together with shared AI memory.项目地址: https://gitcode.com/GitHub_Trending/macro3/macroMacro 是一个面向团队的统一工作区把邮件、聊天、文档、任务、AI 智能体、通话和 CRM通过 引用关联在一起并共享同一份 AI 记忆。支撑这一切的是一套以Postgres 为核心的数据库设计全部核心数据落在一个由 macro_db_client 管理的数据库中使用sqlx 编译时 SQL 检查并通过300 多个迁移文件当前 338 个可追溯地演进 schema。本文将带你从架构到日常开发命令完整看懂这套设计。为什么统一工作区选择单一 PostgresMacro 的产品形态决定了数据必须互相认识一封邮件可以 一个文档一个任务可以引用一条消息一个 CRM 客户可以关联整段沟通历史。这种强关联场景下跨库查询和一致性成本会急剧上升而单一 Postgres 数据库配合清晰的域划分是更简单也更可靠的选择。从产品界面就能看出数据互相 关联的设计邮件线程、消息频道、任务清单、CRM 看板都不是孤立的功能而是同一批实体联系人、文档、消息、AI 记忆在不同视角下的呈现。Macro 数据库架构macro_db_client 的域分离设计Macro 的数据库访问层遵循一个域、一个客户端 crate的原则核心业务库crates/macro_db_client/ 负责 MacroDB 的全部查询其 README 明确写着 This crate handles all database queries for Macro DB。它的 src/ 目录按域拆分为 email、chat、document、call、notification、organization 等 200 多个模块每个模块对应一张或一组业务表。辅助库各自独立邮件、通知、通讯录等重业务域还有专属客户端如 email_db_client、notification_db_client、comms_db_client各管各的表互不干扰。模型层与存储层解耦数据结构定义在 model、models_properties 等 crate 中与执行 SQL 的 repo 层分离方便测试与复用。这种划分的直接好处改邮件模块的查询不会误碰通知模块的表每个域的迁移脚本也随域走责任清晰。编译时 SQL 检查让 SQL 错误在 cargo build 时暴露传统 Rust 项目写 SQL 是运行时惊喜拼错表名、列类型不匹配代码编译通过到生产环境才报错。Macro 的做法是用sqlx 宏Cargo.toml 中统一声明sqlx 0.8.6启用postgres、chrono、uuid特性query!、query_as!、query_scalar!、query_file!这组宏在编译期连接数据库 schema 校验 SQL——表名不存在、列类型不符、参数个数不对直接编译失败整个 workspace 的查询元数据缓存在根目录的.sqlx/中约 1700 个 query 元数据文件离线构建时依然可用官方文档 docs/DATABASE_DEVELOPMENT.md 明确要求默认使用编译期检查宏动态 SQL 仅限真正动态的场景且动态标识符必须走白名单。对新手来说这意味着一件事你在编辑器里保存的那一刻SQL 是否写错就已经有答案了。这正是 Macro 在 200 多个 repo 模块中保持查询质量的关键。300 迁移文件schema 演进的完整历史打开 crates/macro_db_client/migrations/你会看到 338 个.sql迁移文件另有若干服务的独立 migrations 目录全仓库合计 348 个全部用时间戳前缀命名例如0001_baseline.sql1500 多行的基线迁移包含 79 张核心表文件头注释说明了它是从 Prisma 迁移到 sqlx 时的基线只在空库上执行日常迁移如20251204165917_create_document_task_table.sql、20260910144342_frecency_events_unprocessed_id_index.sql一个文件只做一件事文件名即变更说明。全量迁移累计执行了 219 个CREATE TABLE。这套每变更一步、必留痕的机制配合 tooling/just/sqlx.just 中封装的sqlx migrate run/sqlx migrate info命令让任何一个历史节点上的 schema 都能被复现和审计。新手注意文档明确要求迁移文件只能由sqlx migrate add生成禁止手写——因为手写文件容易猜错表名列名schema 采用 camelCase 标识符如userId查询时还需SELECT userId AS user_id做别名对齐工具生成才能保证与真实 schema 一致。来自开发指南的三条安全变更铁律docs/DATABASE_DEVELOPMENT.md 中Safe database schema changes一节值得每个后端新人抄在便签上迁移先于服务上线——每个迁移必须兼容当前线上正在跑的服务代码而不是你 PR 里的新代码删列必须分两步——先在服务 PR 中移除该列的所有读写等全量部署完成后再在另一个 PR里删列删表、改列名同理新增列要宽容——在写入方迁移完成前新列必须允许空值或带默认值避免旧代码写入失败。这三条的本质是数据库是共享契约任何破坏性变更都要给旧代码留一条活路。本地开发快速上手三条命令跑起数据库依托 justfile 和 docs/RUNNING_LOCALLY.md本地环境搭建非常直接just run_dbs -d——启动 Postgres 和 Redis 容器及网络just setup_macrodb——创建 MacroDB 并应用全部迁移含 README 中提到的测试前置条件;just crates/macro_db_client/migrate_db——后续每次 schema 变更后重新应用迁移。当你修改了 SQL 或 schema还需要刷新 sqlx 查询缓存nix develop --command just prepare_db内部调用cargo sqlx prepare --workspace。缓存文件要随代码一起提交但严禁手改.sqlx/query-*.json。遇到缓存缺失或 schema 漂移的报错文档的 Troubleshooting 一节给了逐条排查路径。总结Macro 的数据库设计可以浓缩成三句话一个 Postgres 支撑统一工作区用域分离的 crate 结构控制复杂度sqlx 编译时检查把 SQL 错误拦在构建阶段.sqlx缓存让离线开发成为可能338 个可追溯的迁移文件 两条 PR 的破坏性变更纪律让 schema 演进既有历史可查又始终向后兼容。这套实践不依赖任何宏大框架而是简单工具 严格纪律的典范非常值得正在做 Rust Postgres 项目的团队参考。【免费下载链接】macroMacro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — -linked together with shared AI memory.项目地址: https://gitcode.com/GitHub_Trending/macro3/macro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/12 12:20:55

_电工证考哪种到期换证流程

电工证考哪种上岗必备怎么选不怕考不过白交培训费 怕考不过白交培训费?别急,我来给你说说【_电工证考哪种】怎么选,别再走弯路了。现在电工证是很多岗位的 上岗必备…

2026/11/12 12:20:55

平南有哪些电工证多少钱别怕考不过白交培训费

平南有哪些电工证多少钱别怕考不过白交培训费 怕考不过白交培训费?平南电工证报考前必须知道的3件事,帮你省下一笔冤枉钱。现在越来越多的人选择考电工证,但很多人并不清楚 平南有哪些电工证 ,更不知道这些证书 多少钱…

2026/11/12 12:20:55

不考电工证有用吗行业前景与薪资待遇

郑州电工证不考有用吗?多久拿证才好找工作 你是不是在郑州金水区从事公路工程相关工作,看到工地上到处都是电工在操作,心里也想学点电工知识?但又犹豫: 不考电工证有用吗?多久拿证才好找工作 ?这些问题困扰着不少准备入行或想转行的你。…

2026/11/12 12:20:55

济南出租电工证平台怎么考?全国通用证书别被中介坑了

济南出租电工证平台怎么考?全国通用证书别被中介坑了 你是不是也遇到过这种情况?手头有电工活儿,就是缺个“全国通用”的电工证,一打听,济南出租电工证平台五花八门,有的打着“包过”“快速拿证”的旗号,结果一上手就出问题,不仅白花了钱,还耽误了工…

2026/11/12 12:20:54

电渣压力焊是特种工吗?电子证书怎么考?实操考试心里没底怕挂科?

电渣压力焊是特种工吗?电子证书怎么考?实操考试心里没底怕挂科? 实操考试心里没底怕挂科?电渣压力焊是特种工吗?这是很多准备报考的考生最关心的问题。电渣压力焊确实在特种作业范围内,但很多人并不清楚它的具体要求和流程。如果你正在准备报考,那么这…

2026/11/12 12:15:52

中级电工证怎么考试千万别踩坑

中级电工证怎么考试千万别踩坑 你是不是也在四处打听中级电工证怎么考试?别急,别被中介忽悠了, 千万别踩坑 。作为在鹤壁公路工程行业摸爬滚打多年的电工,我太懂你们的焦虑了。不是怕考不过,而是怕报名时被坑,考完又发现证用不了。今天就从报名到考试…

2026/11/11 12:42:59

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/12 0:04:01

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘

工地太忙根本没时间复习考试?学习电工证到哪里学通过率揭秘 工地太忙根本没时间复习考试?你不是一个人。作为一名在南阳卧龙区干了七八年市政公用工程的电工,我深知这个问题的现实性。电工证不仅是工作的“入场券”,更是职业发展的“通行证”,但备考过程…

2026/11/12 0:04:01

双流电工证考别怕挂科!郑州报考避坑指南全攻略

双流电工证考别怕挂科!郑州报考避坑指南全攻略 实操考试心里没底怕挂科?双流电工证考在郑州报名,很多人因为不了解流程、准备不充分,白白浪费时间和金钱。作为三门峡应届工程类毕业生,我也曾经历过这样的焦虑。今天就从零开始,手把手教你如何避开郑州报…

2026/11/12 0:04:01

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少

之前考的证在外省能不能转过来 怎么报名考电工证培训价格多少 之前考的证在外省能不能转过来?这个问题确实让不少准备换城市工作的朋友犯了难,尤其像电工证这种实操性很强的证书,很多人担心跨省后证书能不能继续用。其实,只要符合相关流程,是可以顺利转…

2026/11/11 20:27:01

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/12 9:51:42

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑