@cisstech/nestjs-pg-pubsub

中文文档
1.15.2发布于 2026/10/29MITTypeScriptCommonJS构建来源已验证近 30 天下载 5828

提供 PostgreSQL PubSub 的 NestJS 模块

中文使用文档
文档目录10 节
  1. 它会做什么
  2. 为什么这个存在
  3. 密钥属性
  4. 安装
  5. 快速启动
  6. 如何运作
  7. 重要制约因素
  8. 配置
  9. 文档
  10. 许可证

@cisstech/nestjs-pg-pubsub (英语)

用于实时 PostgreSQL 的 NestJS 模块,使用触发器和持续队列来更改数据捕获.

CI codecov codefactor GitHub Tag npm package NPM downloads licence code style: prettier

它会做什么

PostgreSQL 触发器在您的表格中检测INSERT, UPDATE和DEELTEs. 在队列表格中坚持更改,然后拉出并发送到键入 NestJS 的收听者. 没有只投票的设计, 没有丢失的信息, 没有外部经纪人.

Diagram

为什么这个存在

邮递SQL LISTEN/NOTIFY 对实时来说是巨大的,但并不可靠:通知是火灾和遗忘,在断开时丢失,而且有效载荷尺寸有限制。 这个库用耐久的队列把它包起来,这样你就能同时得到反应和保证的交付.

密钥属性

  • 持久性: 通知前在 SQL 表格中持续更改,幸存的崩溃和重新启动
  • 反应数字 : LISTEN/NOTIFY 启动即时处理,以倒计时计费器作为安全网
  • 已订购:信息由ID处理,分批处理,分批处理 SELECT FOR UPDATE SKIP LOCKED
  • 用后退重试: 失败的消息被重审, 以指数反转(2^{n}$分钟)
  • 后压: 将同时提交的通知合并在一起,以便最多一次运行一个拉力周期
  • 隔离池: 使用它自己的 pg.Pool,独立于 TypeORM ,以避免集合相争
  • 零下限 DDL: 触发器是指纹( MD5) , 仅在配置更改时重新创建

安装

yarn add @cisstech/nestjs-pg-pubsub pg

支持NestJS v10+和v11+.

快速启动

// app.module.ts
@Module({
  imports: [
    TypeOrmModule.forRoot({
      /* ... */
    }),
    PgPubSubModule.forRoot({
      databaseUrl: process.env.DATABASE_URL,
    }),
  ],
  providers: [UserChangeListener],
})
export class AppModule {}
// user-change.listener.ts
@Injectable()
@RegisterPgTableChangeListener(User)
export class UserChangeListener implements PgTableChangeListener<User> {
  async process(changes: PgTableChanges<User>, ctx: PgTableChangeContext): Promise<void> {
    for (const insert of changes.INSERT) {
      console.log(`New user: ${insert.data.email}`)
    }

    for (const update of changes.UPDATE) {
      console.log(`Updated fields: ${update.data.updatedFields.join(', ')}`)
    }
  }
}

就是这样。 库自动创建触发器,队列表,并开始收听.

如何运作

  1. PostgreSQL 表格更改时触发起火并插入一行 pg_pubsub_queue
  2. 扳机发出一个 NOTIFY 带有频道名称
  3. 库收到通知并从队列中取出待发信件
  4. 信件发送到匹配 @RegisterPgTableChangeListener 类
  5. 处理中的信件被标记为这样; 失败的信件被重审, 以指数回放
  6. 一个背景传票人每隔60年运行一次 作为安全网 错过通知

重要制约因素

  • 听者须快. 一个慢听者拖延了那张桌子的整个批次. 卸下重活到排队(Bull等),只是从收听者中排出.
  • 使用 TransactionAdapter 用于交易性写作. 如果收听者需要在交易中写入 DB,请配置 transactionAdapter 并用它标记听众 @RegisterPgTableChangeListener(Entity, { transactional: true })。库将收听器的呼叫包入适配器,通过 ctx.transaction。没有适配器,则使用 ctx.onError 以信号失败.

配置

所有选项都是可选的,但 databaseUrl见 完整配置参考 详细情况.

密钥调制键 :

选项默认它控制着什么
queue.batchSize100个每个拉出周期获取的最大消息
queue.drainInterval50分钟在排水循环迭接间暂停( DB 呼吸室)
queue.processingTimeout5分钟之后,一个 processing 信件被视为孤儿和再审
queue.concurrency页:1每批并行执行的最大收听器
queue.awaitInitialPulltrue启动是否等待初始拉出队列
transactionAdapter- 说吧在交易中包装听众的 ORM 不可知适配器
pool.max页:1专用 pg- pubsub 池中的连接

文档

完整文档: https://cisstech.github.io/nestkit/docs/nestjs-pg-pubsub/getting-started (中文(简体) )

许可证

麻省理工学院 马马杜·西塞

版本与发布记录

@cisstech/nestjs-pg-pubsub 共发布 15 个版本,首次发布于 2025/03/14;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.15.2latest2026/10/2911 天前
1.15.12026/09/281 个月前
1.15.02026/03/267 个月前
1.14.12026/03/267 个月前
1.14.02026/02/198 个月前
1.13.12026/01/0810 个月前

关于 @cisstech/nestjs-pg-pubsub 的常见问题

@cisstech/nestjs-pg-pubsub 是什么?

提供 PostgreSQL PubSub 的 NestJS 模块

如何安装 @cisstech/nestjs-pg-pubsub?

在项目目录运行 npm install @cisstech/nestjs-pg-pubsub,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:pg(^8.x)、typeorm(^0.3.x)、pg-listen(^1.x)、@nestjs/core(^10.x || ^11.x)、@nestjs/common(^10.x || ^11.x)、@golevelup/nestjs-discovery(^4.x || ^5.x)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@cisstech/nestjs-pg-pubsub 支持 TypeScript 吗?

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

@cisstech/nestjs-pg-pubsub 支持 ESM 还是 CommonJS?

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

@cisstech/nestjs-pg-pubsub 可以商用吗?

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

@cisstech/nestjs-pg-pubsub 的下载量有多少?

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

@cisstech/nestjs-pg-pubsub 还在维护吗?

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