PgQue
Tipo: Repositório Open Source Autor(es): Nikolay Samokhvalov (PostgresAI) Publicado: 2026 (v0.2.0 em 2026-05-25) Acessado: 2026-07-04
Relevância
PgQue é uma fila de eventos "zero-bloat" para PostgreSQL, implementada inteiramente
em SQL e PL/pgSQL — sem extensão C — que reimplementa o algoritmo do PgQ (Skytools,
criado na Skype) usando batching por snapshot e rotação via TRUNCATE em vez de
DELETE/UPDATE por linha. Expõe uma API SQL completa: produção (send,
send_batch), consumo com cursor próprio por consumidor (subscribe, receive,
ack, nack), dead-letter queue (dlq_inspect, dlq_replay, dlq_purge) e
observabilidade (get_queue_info, get_consumer_info). Requer PostgreSQL 14+ e,
para o "tick" automático de rotação, pg_cron (ou um agendador externo chamando
pgque.ticker() em loop, mais as funções de manutenção — incluindo
pgque.maint_rotate_tables_step2(), que não está embutida em pgque.maint();
pgque.ticker_loop() é de uso interno do pg_cron, ver ADR-022).
Além da API normal de consumo (um cursor lógico único por nome de consumidor —
réplicas concorrentes do mesmo nome duplicam o lote, não dividem), o PgQue 0.2
também expõe uma API de consumidores cooperativos
(subscribe_subconsumer/register_subconsumer, receive_coop, next_batch
de 4 argumentos), que permite múltiplas réplicas ("subconsumers") sob o mesmo
grupo lógico dividirem lotes de eventos entre si de verdade, com takeover
automático do lote de uma réplica travada via dead_interval. O próprio autor
marca essa API como "Experimental in PgQue 0.2" — ver ADR-026.
Mecanismo adotado na ADR-022 (aceita em
2026-07-07) para substituir o RabbitMQ (ADR-008,
histórico) no papel de log de eventos multi-consumidor (fan-out) do stack — eliminando a
dependência de um cliente AMQP em Perl, cujo módulo principal (Net::AMQP::RabbitMQ)
não compila em Windows. Por ser SQL puro, PgQue é acessado inteiramente via
Mojo::Pg (ADR-016), sem
nenhuma dependência XS nova no cpanfile.
É um projeto em estágio inicial (v0.2.0, "early-stage" segundo o próprio README) —
o motor conceitual (PgQ) tem mais de uma década de uso em produção na Skype, mas o
empacotamento PgQue em si é recente. O estudo completo de prós, contras e
armadilhas está em
docs/adrs/references/ADR-022-estudo-filas-postgresql.md.
Referenciada em
- ADR-022 — decisão de substituir o RabbitMQ pelo PgQue como mecanismo de filas em PostgreSQL (aceita em 2026-07-07)
- ADR-018 — a Stega usa o PgQue
como fila de eventos multi-consumidor (
NotificationWorker) - ADR-025 — o
próprio tick do PgQue já depende de "
pg_cronou um agendador externo" (nota acima); a ADR-025 aplica o mesmo raciocínio ao agendamento de jobs do Minion, com um processo dedicado equivalente aoscript/pgque_ticker - ADR-026 — usa a API
de consumidores cooperativos (nota acima) para dividir trabalho de verdade
entre múltiplas réplicas do
Stega::Worker::SlaBreachWorker