@atelia/pg-change-context

中文文档
0.1.1发布于 2026/08/10MITTypeScriptCommonJS零依赖构建来源已验证近 30 天下载 1871

与 PostgreSQL 数据修改一起释放应用程序上下文,用于逻辑解码 CDC

中文使用文档
文档目录7 节
  1. 它会做什么
  2. 说对了
  3. 这个包故意不做的
  4. 为什么上下文是争论
  5. 行为
  6. 释放
  7. 许可证

@ atelia/ pg- chang- context

为消费者在PostgreSQL数据变化的同时输入应用程序上下文 通过逻辑解码从写头日志中读出.

麻省理工学院有执照 独立于这个储存库的其余部分,即SSPL-1.0—— 见 许可证。 。 。 .

它会做什么

问题 pg_logical_emit_message(true, '_bemi', <json>) 客户端 你给它.

import { emitChangeContext } from '@atelia/pg-change-context'

await prisma.$transaction(async (tx) => {
  await emitChangeContext(tx, { tenantId, userId })
  await tx.thing.update({ ... })
})

信件是交易的, 所以只有在交易中才变得可见 承诺,一个回滚 丢弃它 恰好它丢弃的写。 疾控中心 消费者通过交易代号将其与变化相配.

说对了

发泄在同一个客户端 写给. 在交互式交易中 这是交易客户端,不是顶级.

Emitting on the top-level clients 通过不同的连接发送消息, 在不同的交易中。 然后它有一个不同的交易代号,所以它是对的 无所事事 也不会随笔而回 两个失败都是 静默: 更改记录正确但无上下文, 即 与从未设置过的代码路径无法区分 .

这个包故意不做的

它不决定是否进行交易.

一个没有附带交易的单独写作是尴尬的。 普里斯马 自动承诺,所以排放,然后写 产生两个交易,两个 交易代号,不配对。 做原子就是开出交易 - 但当打电话者这样做时 已经 有个是打破呼叫器的 交易.

因此,规则是:在没有呼叫者交易时收尾,在没有交易时不收尾 没错 这个软件包不能评价这个规则,因为只有应用程序的 交易管理器知道是否打开。 猜想就是产生 更改此软件包的存在以避开 .

拥有已经管理的交易的决定——CLS范围 交易主机、工作单位或明示 $transaction 呼叫时 网站——和呼叫 emitChangeContext 和经理给你的客户.

如果您确实包写了先前的自动开始, 请将交易保存到 准确的发射和写作。 里面没有别的东西,没有读,没有 服务电话,没有外出请求。 曾经持有集合的文字 单个语句的连接, 现在持有一个交易, 在什么上 通常是系统里最热的路径, 以及后面增加的任何东西 伸展这个握住。 值得坚持声明 计算包装的位置 已经执行,所以第三个语句失败测试而不是悄悄地改变 负载下的连接行为 .

为什么上下文是争论

上下文在库中传递,而不是从环境商店读取 拥有。 这是有意的.

一个从 Aync- local 存储器读取的发射器继承了其中的任何内容 商店,还有一家商店 enterWith 可在以后的工作中坚持: 同一执行背景。 产生的失败并非缺失 上下文——是一份请求的租户和用户,附在另一份请求的后面 变化。 在任何涉及归属问题的制度中,更改记入 错误的房客比一个没有名声的变动更糟:第一个是错的 看对了,第二个只是不完整和明显的.

将值当作一个参数,使得这个类的bug在这里无法接触到. 若为 调用应用程序在请求范围中保留上下文, 并在那里解决 并传递结果——范围界定将停留在请求的生命周期 理解,而这个包 不能超过它.

行为

投入结果
空上下文 {}无偿返回
字节限制的背景投出——从不截断或跳出
不可序列值掷出
不是普通对象掷出
执行器拒绝宣传

它回来了 void。每投出一次失败,所以没有结果检查,也没有结果 忽略一种方式——通常发出或无任何回电 以释放。 布尔必须被检查 意味着什么, 和不受限制 返回悄悄地表示“ 无所事事” 是错误的形状 此软件包存在 要删除.

这里没有什么会悄悄失败的 未到达日志的上下文表示更改 将不归罪于任何人, 只有打电话者可以决定是否 写作失败.

限值默认为8 KiB并按可调取. 宽宏大量 相对于实际有效载荷而言;超出这一范围通常意味着某种意想不到的东西是: 随函附上.

释放

标记在自己的命名空间中,与 bemi-v* 选择什么的标签 部署管道的建设.

# bump "version" in context/package.json, commit, then:
git tag pg-change-context-v0.2.0
git push origin pg-change-context-v0.2.0

.github/workflows/publish-context.yml 运行全部寄存器门之前 如果标签与显示的版本不一致或如果 焦油丸没有许可证或生产.

许可证

麻省理工学院——见 LICENSE 在此目录中.

这个寄存器的其余部分为SSPL-1.0. 此套件是分开的, 并导入 没有它,所以应用程序可以链接 它没有自己的许可证 正在受到影响. scripts/licence-boundary.sh 执行分离作为 制造出失败,而不是公约,因为将打破它的进口 看起来像一个无害的清理.

版本与发布记录

@atelia/pg-change-context 共发布 3 个版本,首次发布于 2026/08/10;过去 12 个月发布了 3 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.1.1latest2026/08/102 个月前
0.1.02026/08/102 个月前
0.0.12026/08/102 个月前

关于 @atelia/pg-change-context 的常见问题

@atelia/pg-change-context 是什么?

与 PostgreSQL 数据修改一起释放应用程序上下文,用于逻辑解码 CDC

如何安装 @atelia/pg-change-context?

在项目目录运行 npm install @atelia/pg-change-context,或使用 pnpm add / yarn add / bun add。

@atelia/pg-change-context 支持 TypeScript 吗?

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

@atelia/pg-change-context 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@atelia/pg-change-context 需要什么版本的 Node.js?

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

@atelia/pg-change-context 可以商用吗?

@atelia/pg-change-context 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@atelia/pg-change-context 的下载量有多少?

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

@atelia/pg-change-context 还在维护吗?

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