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 forvtseconds; if they are not deleted or archived in time they become visible again.pgmq.send(queue, msg, delay)delays delivery bydelayseconds.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.