@ 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 执行分离作为
制造出失败,而不是公约,因为将打破它的进口
看起来像一个无害的清理.