Repolode
pgmq

pgmq/pgmq

基于 Postgres 实现的轻量级消息队列,API 设计参考 AWS SQS 和 RSMQ。

可替代:AWS SQS

Star
5,344
Fork
151
未关闭 Issue
29
最近提交
3天前

这是什么?

PGMQ 是运行在 PostgreSQL 内部的消息队列。无需额外部署 RabbitMQ、Redis 之类的消息中间件,每个队列就是 pgmq 模式下的一张表,通过 SQL 函数完成消息的发送、读取、归档和删除。它没有后台进程,也没有外部依赖,可以在现有 Postgres 实例上直接使用,也可以作为扩展安装。

消费者读取消息时会设置可见性超时:消息在处理期间对其他消费者不可见;如果超时前没有被删除或归档,消息会重新变为可见。在该机制下,项目支持超时窗口内的恰好一次投递,并提供带消息组键的 FIFO 队列,以及支持通配符的主题路由。归档的消息会保存在独立的表中,便于之后查询。

项目提供支持 Postgres 14 至 18 的 Docker 镜像,并有 Rust、Python 等多种语言的客户端库。

核心功能

  • 01以 Postgres SQL 对象形式运行,无需后台进程
  • 02可见性超时机制保证超时窗口内的恰好一次投递
  • 03支持带消息组键的 FIFO 队列,实现有序处理
  • 04支持通配符的主题路由
  • 05消息可归档到独立表中,用于长期保留和回放
  • 06API 与 AWS SQS、RSMQ 保持相近

适用场景

  • 在已使用 Postgres 的应用中加入后台任务队列
  • 在中小型技术栈中避免额外部署消息中间件
  • 需要超时后重试失败任务的可靠任务处理
  • 通过归档已处理消息保留审计记录

快速上手

  1. 1

    启动预装 PGMQ 的 Postgres 容器

    docker run -d --name pgmq-postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 ghcr.io/pgmq/pg18-pgmq:v1.10.0
  2. 2

    使用 psql 连接数据库

    psql postgres://postgres:postgres@localhost:5432/postgres
  3. 3

    在 SQL 中启用扩展

    CREATE EXTENSION pgmq;

使用前须知

  • 需要运行中的 Postgres 实例,因此必须自行管理数据库。
  • 除元数据中的 PostgreSQL 许可证外,README 未提及其他需注意的事项。

标签

常见问题

pgmq 是什么?
基于 Postgres 实现的轻量级消息队列,API 设计参考 AWS SQS 和 RSMQ。 PGMQ 是运行在 PostgreSQL 内部的消息队列。无需额外部署 RabbitMQ、Redis 之类的消息中间件,每个队列就是 pgmq 模式下的一张表,通过 SQL 函数完成消息的发送、读取、归档和删除。它没有后台进程,也没有外部依赖,可以在现有 Postgres 实例上直接使用,也可以作为扩展安装。
pgmq 可以免费使用吗?用的什么许可证?
pgmq 以 PostgreSQL 许可证开源。用于商业产品前,请先确认许可证条款。
pgmq 还在维护吗?
活跃维护中。pgmq 最近一次提交是在 2026年10月20日。
pgmq 适合用来做什么?
在已使用 Postgres 的应用中加入后台任务队列 在中小型技术栈中避免额外部署消息中间件 需要超时后重试失败任务的可靠任务处理 通过归档已处理消息保留审计记录
pgmq 怎么安装和运行?
启动预装 PGMQ 的 Postgres 容器: docker run -d --name pgmq-postgres -e POSTGRES_PASSWORD=postgres -p 5432:5432 ghcr.io/pgmq/pg18-pgmq:v1.10.0 使用 psql 连接数据库: psql postgres://postgres:postgres@localhost:5432/postgres 在 SQL 中启用扩展: CREATE EXTENSION pgmq;
在哪里获取 pgmq?
源代码和安装说明在 GitHub 上:https://github.com/pgmq/pgmq

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目