Queues

Durable message queues inside Postgres with pgmq: send, read with a visibility timeout, archive.

Enable pgmq under Database → Extensions in Studio. Your project role owns the queues; manage them in Studio under Integrations → Queues (create logged or unlogged queues, send messages with a delay, read, archive, delete and see queue metrics) or with SQL:

SQL
select pgmq.create('emails');

-- Producer
select pgmq.send('emails', '{"to": "[email protected]", "template": "welcome"}');

-- Consumer: read 5 messages, hidden from other readers for 30 seconds
select msg_id, message from pgmq.read('emails', 30, 5);

-- Done: archive (kept in pgmq.a_emails) or delete
select pgmq.archive('emails', 1);
select pgmq.delete('emails', 2);

-- Queue size and age
select * from pgmq.metrics('emails');

#Semantics

  • pgmq.read(queue, vt, qty) hides messages for vt seconds; if they are not deleted or archived in time they become visible again.
  • pgmq.send(queue, msg, delay) delays delivery by delay seconds.
  • pgmq.pop(queue) reads and deletes in one step.
  • pgmq.create_unlogged(queue) is faster but loses messages on a crash.
  • pgmq.drop_queue(queue) removes a queue and its archive.
  • Queue names are 1 to 47 letters, digits and underscores.
Was this helpful?