-- CreateTable CREATE TABLE "OutboxEvent" ( "id" TEXT NOT NULL, "type" TEXT NOT NULL, "payload" JSONB NOT NULL, "attempts" INTEGER NOT NULL DEFAULT 0, "lastError" TEXT, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "OutboxEvent_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "OutboxEvent_attempts_createdAt_idx" ON "OutboxEvent"("attempts", "createdAt"); -- LISTEN/NOTIFY trigger: fires pg_notify('outbox_event', NEW.id) after each INSERT -- The worker holds an open pg.Client with LISTEN outbox_event to receive these events. -- AFTER INSERT ensures NOTIFY fires only after the transaction commits. CREATE OR REPLACE FUNCTION notify_outbox_event() RETURNS TRIGGER AS $$ BEGIN PERFORM pg_notify('outbox_event', NEW.id); RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER outbox_event_notify AFTER INSERT ON "OutboxEvent" FOR EACH ROW EXECUTE FUNCTION notify_outbox_event();