978f7effc0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
30 lines
947 B
PL/PgSQL
30 lines
947 B
PL/PgSQL
-- 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();
|