@cruba/crubal-postgres

中文文档
0.3.77发布于 2026/11/09Apache-2.0TypeScriptES Module近 30 天下载 8773

在 Postgres 上持续存在的 CRUBAL 商店: 日志作为真理, 所有其他的表格都从它重建出缓存.

中文使用文档
文档目录12 节
  1. 它会做什么
  2. 证据
  3. 工作内容
  4. 预测和流量
  5. 边界
  6. 命令
  7. 从商店安装和定义
  8. 以真实行为发送
  9. 审查决定和重播
  10. 犯什么罪拒绝
  11. 东道国(14.1)
  12. 还没到呢

@cruba/crubal-postgres (英语)

在 Postgres 上持续存在的 CRUBAL 商店: 日志作为真理, 所有其他的表格都从它重建出缓存. 设计在 文件/设计/储存;此软件包是其第一个版本.

它会做什么

  • 一个主人,一个连锁店 PgStore。 。 。 . commit(by, mutate, at?, extra?) 运行草稿操作 将所有者状态, 转换成一个条目, 应用引擎自己的 applyEntry, (中文(简体) ), 粘接差异并附加条目,所有交易都与链行相锁。 A 类 拒绝让一切回落. append(entry) 使用在别处制作的条目,并以同样方式链接.
  • 计划 (单位:千美元)src/schema.sql)是设计表,每张由所有者键入. 只有日志表 更新是编辑;一个触发器拒绝其他更新和每个删除.
  • rebuild() 空出所有者的状态表并再次应用日志 . verify(keys?) 检查 链条的链接和签名. redact(logId, writeIndex?) 以散列取代一个写法,或 以散列(spec 8.5.2)输入,然后重建,所以缓存会忘记日志所忘记的东西.
  • 这里什么也做不了决定. 折叠、规则、访问、生命周期和观点 @cruba/crubal是因为 并运行不变;此软件包加载工作集,坚持差异并保持链条.

证据

test/pg.test.ts 运行于真实的 Postgres 时 CRUBAL_PG_URL 设置( 本地邮局 17 是 足够: CRUBAL_PG_URL=postgres:///postgres npm test在它自己的计谋中, 却被忽略了 它检查每个血清记录 重建到与Postgres相同的状态 内存,该日记操作(attach, 合并, 有级联的归档) 写入与该 内存日记并离开同一状态, 编辑一个写入会保持链条有效, 重建 状态中,当触发器拒绝其他任何更改时,没有值,并且所有者永远不会相见.

工作内容

操作运行在需要装载的一组工作设备上(src/working.ts) (中文(简体) ). 发动机是 同步而纯洁,所以操作运行在一个集合上,以解答它所拥有的,并注意它的缺乏(a) 按身份证记录,记录在一个级别,记录的孩子,a for目标 钥匙的持有者 a 装订,运行); 商店装入所缺少的东西,然后在一份新副本上再次运行操作,直到 运行要求什么新的。 边缘,指令和定义被装入整体,是小的. 这个条目 应用程序的结算方式相同,所以在60个记录中有一个附件可以装入它碰到的两个记录和它们的 邻居,从来不是六十岁. store.trace 说上个手术装了什么 手术传到 commit 因此,它必须作为草案的一个纯粹的功能:它可能不止运行一次.

预测和流量

给定的商店 projecting: { dict, views, perms? } 标记,在每笔交易中,行 记录显示,每张记录 都改变了引擎的特性 staleAfter 名称, 工作 输入前的状态( o)src/projector.ts) (中文(简体) ). project(view?, audience?) 在任何外部出版 写入交易:它第一次(并在新版本之后)重建了每行,之后只重建 标记的,通过引擎 Views 以装入视图内容的一组工作设备进行对比 它们与已存储的投影, 附加每行已更改或左侧的一个流条目, 按视图编号 和观众,并清除标记. entriesSince(view, seq) 是一个从光标读取的索引. 与 fresh: "write" 每一个承诺一回来就公布 测试重放血压 (views/010)和去除(views/013)并获得内存 Views.stream 用于字节的条目字节.

边界

PgBorder 管理商店的合同(src/border.ts:每跑会构建引擎的 Exchange 结束 承诺的草稿,有商店的边缘,它的运行计数 和它已经采取行动的钥匙,所以运行是一 进入并永远不要在重启时两次行动. receive 财务报告和审定财务报表 arrive 使用它的字节保留录入记录 {\fn黑体\fs20\shad2\2ah82\3ah20\4ah33\fscx95\3ch592001\be1}和散沙一样 intake 表格; send 每项合同、记录和有效载荷最多一次; streamRun 读取商店表格中的投影流,因为索引的光标(或呼叫者)拒绝 上方对无 run每批记录为运行; ack 保持光标; tick 运行一个预定的合同 到期的勾 schedules 表,按合同键和 勾选. store.erase(record) 将每个值都写到日志的全记录中,并留下其外壳.

命令

bin/crubal-pg.ts,与 CRUBAL_PG_URL 设定 : migrate, (中文(简体) ), rebuild <owner>, (中文(简体) ), verify <owner>, (中文(简体) ), export <owner>, (中文(简体) ), redact <owner> <log> [<write>], (中文(简体) ), erase <owner> <record>, (中文(简体) ), project <owner> --defs <file>… 财务报告和审定财务报表 tick <owner> <contract> --now <moment> --defs <file>…。 。 。 .

从商店安装和定义

store.install(bundle, keys) 取出已公布的版本( docs/design/publishing.md):它拒绝未签名的 捆绑,除非商店允许它们开发, 捆绑的散列或签名不能验证, a 语言版在商店之上, 和捆绑谁 extends 没有安装在他们的被钉上 版本; 它检查每次发布检查后产生的定义; 然后写一个 install 条目,将捆绑放入 bundles,当安装了更早版本的软件包时, 把每张唱片 都从那个版本的食谱中复制出来 by: migration,以及 留下每个视图重建. store.define(member) 是所有者自己的零钱:与其余部分核对, 然后一个 define 写作. store.definitions() 从安装的捆绑中构建引擎运行的功能 顺序,然后定义写入,每个链头缓存;投影器和 PgBorder.over(store) 带 他们的字典、观点、合同和权限,所以除了 测试.

以真实行为发送

商店的寄件是两个条目,它们之间的行为(docs/design/runs.md): prepare 日志 started 与一能键和有效载荷的散列,有效载荷本身保存在内 outtake; 数据 合同适配器adapters: { [contract]: (contract, payload, run) => … },主机代码,从不 包件)在任何交易之外进行;然后 acted 或者说 failed 和它的尝试。 跑步还开着 (单位:千美元)started,或 failed 尝试 retry被播种在每一个新边界 从跑道 表格,所以一个重启 永远不会两次 retry(run) 重新从保存的有效载荷中行动,而不进行再绘图. 最后一次尝试之后,有一个审查项目 run:<contract> 打开。 适配器带回的答案会关闭 以收件方式运行 via 运行; undo(run) 执行倒置合同,指明其原因; erase 以记录的值排出行数.

审查决定和重播

store.review() 列出未打开的项目; store.decide(decision, by) 将一个条目作为一个条目(审查) 使用定义、值或释放来写,然后重放每个决定所达到的连续输入(a) sacet的新值,一个合同的未知字段,一个单位的拼写,每个单位自己的条目 by: migration: replay取代之前的摄入量 剩下的留给信托机构 A 类 units 定义将所有者的扩展输入生效的单元表格(目前每个进程有一个所有者)。 一个死人 运行 retry 释放出它的钥匙,所以一个新鲜的边框再次发送有效载荷. 观察运行装入 除草案外,还支持记录及其上级以及其中开放式的拆分项目的意见; 在包裹 split 打开边框的阈值 split:<record>和决定 split 薄荷 版本并移动实例.

犯什么罪拒绝

每个条目都在同一运行中被检查并应用它(所以检查会读出负载): 拥有软件包的 ownership 不允许(14.1) 唱片穿的课不是同类的 成绩为空的班级(5.5), within 形成一个周期或跨越的拥有者(14.2)和每一边 书写(14.12)。 应急边缘是宿主对照已公布的术语(14.13.

东道国(14.1)

拥有记录 <owner>:<id> 是主人的: 给它写的信离开主人的入会 一人在一人的链条上连通并签名(与 hostedSigner 显示主机手 在同一交易中; 锁在固定顺序中。 重建应用所有者的链条 和主的铁链,按著他们的书写顺序排列log.ord);去除每条链条中的修饰.

store.drain(rate) 财务报告和审定财务报表 crubal-pg drain <owner> [--rate N] 最多对 每个电话都有很多记录,每个记录都有 by: migration: drain。 。 。 .

还没到呢

主机:认证,秘密,命名适配器,签名,回路和HTTP表面 (文件/设计/host.md);表格作为数据(文件/设计/索引-和表格.md).

版本与发布记录

@cruba/crubal-postgres 共发布 49 个版本,首次发布于 2026/10/20;过去 12 个月发布了 49 个版本。

版本发布日期距今
0.3.77latest2026/11/091 天前
0.3.762026/11/092 天前
0.3.752026/11/092 天前
0.3.742026/11/092 天前
0.3.732026/11/082 天前
0.3.712026/11/082 天前

关于 @cruba/crubal-postgres 的常见问题

@cruba/crubal-postgres 是什么?

在 Postgres 上持续存在的 CRUBAL 商店: 日志作为真理, 所有其他的表格都从它重建出缓存.

如何安装 @cruba/crubal-postgres?

在项目目录运行 npm install @cruba/crubal-postgres,或使用 pnpm add / yarn add / bun add。

@cruba/crubal-postgres 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cruba/crubal-postgres 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cruba/crubal-postgres 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cruba/crubal-postgres 可以商用吗?

@cruba/crubal-postgres 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cruba/crubal-postgres 的下载量有多少?

根据 npm 官方下载统计,@cruba/crubal-postgres 在 2026/10/11 – 2026/11/09 这 30 天内被下载 8,773 次,日均约 292 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cruba/crubal-postgres 还在维护吗?

最新版本 0.3.77 发布于 2026/11/09(1 天前);至今共发布 49 个版本,其中过去 12 个月发布了 49 个;首次发布于 2026/10/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。