# @fetchq/pg-pubsub 中文文档

规范地址：https://npmcn.com/package/%40fetchq/pg-pubsub/

版本：0\.9\.0
npm 元数据更新时间：2024-07-12T09:47:19.682Z
中文译文更新时间：2026-11-14T15:09:36.075Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40fetchq/pg-pubsub
原文对照：https://npmcn.com/package/%40fetchq/pg-pubsub/?lang=original
项目主页：http://github.com/voxpelli/node-pg-pubsub
源码仓库：https://github.com/voxpelli/node-pg-pubsub

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

- 包体积（解压后）：18.8 kB，14 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- Node.js 要求：\>=10\.0\.0
- 运行依赖：5 个
- 首次发布：2020-08-06T10:55:55.525Z
- 最新版本发布：2024-07-12T09:47:19.532Z
- 近 30 天下载量：12150（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

在PostgreSQL NONIFY/LISTEN上发布/订阅执行

## 安装

```sh
npm install @fetchq/pg-pubsub
```

也可以使用：`pnpm add @fetchq/pg-pubsub`、`yarn add @fetchq/pg-pubsub`、`bun add @fetchq/pg-pubsub`

## README

# PG PubSub 软件

出版/订阅 [邮政通知/邮件](http://www.postgresql.org/docs/9.3/static/sql-notify.html)

[![Linting Build Status](https://github.com/voxpelli/node-pg-pubsub/workflows/Linting/badge.svg)](https://github.com/voxpelli/webpage-webmentions/actions) [![Node CI Build Status](https://github.com/voxpelli/node-pg-pubsub/workflows/Node%20CI/badge.svg)](https://github.com/voxpelli/webpage-webmentions/actions) [![Coverage Status](https://coveralls.io/repos/voxpelli/node-pg-pubsub/badge.svg)](https://coveralls.io/r/voxpelli/node-pg-pubsub) [![dependencies Status](https://david-dm.org/voxpelli/node-pg-pubsub/status.svg)](https://david-dm.org/voxpelli/node-pg-pubsub) [![Known Vulnerabilities](https://snyk.io/test/github/voxpelli/node-pg-pubsub/badge.svg?targetFile=package.json)](https://snyk.io/test/github/voxpelli/node-pg-pubsub?targetFile=package.json) [![js-semistandard-style](https://img.shields.io/badge/code%20style-semistandard-brightgreen.svg?style=flat)](https://github.com/Flet/semistandard)

## 安装

```bash
npm install pg-pubsub --save
```

## 所需资源

节点.js >= 10.x 邮递: 9.4

## 使用量

```js
const PGPubsub = require('pg-pubsub');
const pubsubInstance = new PGPubsub(uri[, options]);
```

### 选项

```js
{
  [log]: Function // default: silent when NODE_ENV=production, otherwise defaults to console.log(...)
}
```

### 方法

-   **添加Channel( 频道Name \[, 事件倾听器\]\]** – 开始在频道上收听,并可选择为该事件添加一个事件收听器. 作为 `PGPubsub` 继承从 `EventEmitter` 一个人自己也加.
-   **删除频道( 频道Name \[, 事件倾听器\]\]** – 要么删除所有事件听众并停止在频道上收听,要么删除指定的事件听众并停止在频道上收听,如果这是最后一个附着的听众的话.
-   **发布( 频道Name, 数据)** – 发布指定数据JSON- 编码到指定频道. 最好还是把电话送过去 `NOTIFY channelName, '{"hello":"world"}'` 使用普通 Postgres 池询问您自己,而不是依赖此模块的单个连接。 a 承诺将被拒绝或解决,取决于Postgres呼叫是否成功.
-   **关闭 (): 承诺** – 关闭数据库连接并删除所有听众. 对优雅的关闭很有用.
-   全体 [事件编辑器方法](http://nodejs.org/api/events.html#events_class_events_eventemitter) 从 `EventEmitter`

### 实例

#### 简单

```javascript
const pubsubInstance = new PGPubsub('postgres://username@localhost/database');

pubsubInstance.addChannel('channelName', function (channelPayload) {
  // Process the payload – if it was JSON that JSON has been parsed into an object for you
});

pubsubInstance.publish('channelName', { hello: "world" });
```

以上发送 `NOTIFY channelName, '{"hello":"world"}'` 到 PostgreSQL, 这将触发上面的听众, 并使用解析过的 JSON `channelPayload`。 。 。 .

#### 高级

```javascript
const pubsubInstance = new PGPubsub('postgres://username@localhost/database');

pubsubInstance.addChannel('channelName');

// pubsubInstance is a full EventEmitter object that sends events on channel names
pubsubInstance.once('channelName', function (channelPayload) {
  // Process the payload
});
```

## 说明

创建一个 `PGPubsub` 实例不会在前面做很多事情。 它会准备在第一个信道被添加后启动Postgres连接,然后它会保持一个连接打开直到关闭,如果它丢失就重新连接,这样它就可以不断收听新的通知.

## 林特 / 测试

### 通过 Make/ Docker 自动化

进行测试的最简单方法是通过 `Makefile` linux 兼容环境 :

```bash
make test
```

### 手动执行

如果您想要手动操作测试, 您首先需要访问 PostgreSQL 实例 。 你可以有两种方式:

#### 维娅·多克

```bash
docker run --rm -it -p 5432:5432 -e \
POSTGRES_DB=pgpubsub_test -e \
POSTGRES_PASSWORD=postgres postgres
```

#### Via 环境文件

您可以创建 _环境文件_ 内 `test/.env`数字 :

```bash
DATABASE_TEST_URL=postgres://postgres:postgres@localhost:5432/postgres

DATABASE_TEST_URL_INVALID_USER=postgres://invalidUser:postgres@localhost:5432/postgres

DATABASE_TEST_URL_INVALID_PASSWORD=postgres://postgres:invalidPassword@localhost:5432/postgres
```

PostgreSQL 设置完成后,您可以用您的节点环境运行测试 :

```bash
npm i
npm test
```

## 常见问题

### @fetchq/pg-pubsub 是什么？

在PostgreSQL NONIFY/LISTEN上发布/订阅执行

### 如何安装 @fetchq/pg-pubsub？

在项目目录运行 npm install @fetchq/pg-pubsub，或使用 pnpm add / yarn add / bun add。

### @fetchq/pg-pubsub 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/fetchq\_\_pg-pubsub 是否存在。

### @fetchq/pg-pubsub 支持 ESM 还是 CommonJS？

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

### @fetchq/pg-pubsub 需要什么版本的 Node\.js？

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

### @fetchq/pg-pubsub 可以商用吗？

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

### @fetchq/pg-pubsub 的下载量有多少？

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

### @fetchq/pg-pubsub 还在维护吗？

最新版本 0\.9\.0 发布于 2024/07/12（2 年前）；至今共发布 7 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/08/06。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

