# @cruba/crubal-postgres 中文文档

规范地址：https://npmcn.com/package/%40cruba/crubal-postgres/

版本：0\.3\.77
npm 元数据更新时间：2026-11-09T03:28:20.487Z
中文译文更新时间：2026-11-11T01:58:20.905Z
软件包许可：Apache-2\.0

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40cruba/crubal-postgres
原文对照：https://npmcn.com/package/%40cruba/crubal-postgres/?lang=original
项目主页：https://github.com/nes4less/crubal#readme
源码仓库：https://github.com/nes4less/crubal

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：392 kB，30 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22
- 运行依赖：2 个
- 首次发布：2026-10-19T21:25:34.064Z
- 最新版本发布：2026-11-09T03:28:20.325Z
- 近 30 天下载量：8773（2026-10-11 至 2026-11-09，npm 官方下载统计）
- 已发布版本数：49（近 12 个月 49 个）

## 中文简介

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

## 安装

```sh
npm install @cruba/crubal-postgres
```

也可以使用：`pnpm add @cruba/crubal-postgres`、`yarn add @cruba/crubal-postgres`、`bun add @cruba/crubal-postgres`

## README

# @cruba/crubal-postgres (英语)

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

## 它会做什么

-   **一个主人,一个连锁店 `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 是什么？

在 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 和提交记录判断。

