Files
junhong_cmp_fiber/migrations/000165_create_public_outbox.up.sql
break 17782d5f8e
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 9m20s
实现七月迭代公共技术基础
2026-07-23 17:52:48 +09:00

45 lines
2.2 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 创建公共 Outbox该表及全部公共索引、约束只由 tech-public-foundation 维护。
CREATE TABLE tb_outbox_event (
id bigserial PRIMARY KEY,
event_id varchar(64) NOT NULL,
event_type varchar(150) NOT NULL,
payload_version integer NOT NULL DEFAULT 1,
aggregate_type varchar(100) NOT NULL,
aggregate_id varchar(100) NOT NULL,
resource_type varchar(100) NOT NULL,
resource_id varchar(100) NOT NULL,
business_key varchar(150) NOT NULL DEFAULT '',
request_id varchar(100) NOT NULL DEFAULT '',
correlation_id varchar(100) NOT NULL DEFAULT '',
payload jsonb NOT NULL,
status integer NOT NULL DEFAULT 1,
retry_count integer NOT NULL DEFAULT 0,
max_retries integer NOT NULL DEFAULT 10,
next_attempt_at timestamptz NOT NULL DEFAULT NOW(),
lease_owner varchar(100),
lease_expires_at timestamptz,
last_error_code varchar(100) NOT NULL DEFAULT '',
last_error_summary varchar(500) NOT NULL DEFAULT '',
delivered_at timestamptz,
created_at timestamptz NOT NULL DEFAULT NOW(),
updated_at timestamptz NOT NULL DEFAULT NOW(),
CONSTRAINT uq_outbox_event_id UNIQUE (event_id),
CONSTRAINT ck_outbox_event_status CHECK (status IN (1, 2, 3, 4)),
CONSTRAINT ck_outbox_event_payload_version CHECK (payload_version > 0),
CONSTRAINT ck_outbox_event_retry_count CHECK (retry_count >= 0 AND max_retries > 0)
);
CREATE INDEX idx_outbox_event_claim
ON tb_outbox_event (status, next_attempt_at, lease_expires_at, created_at);
CREATE INDEX idx_outbox_event_type_status
ON tb_outbox_event (event_type, status);
CREATE INDEX idx_outbox_event_aggregate
ON tb_outbox_event (aggregate_type, aggregate_id, created_at);
CREATE INDEX idx_outbox_event_resource
ON tb_outbox_event (resource_type, resource_id, created_at);
CREATE INDEX idx_outbox_event_request_id ON tb_outbox_event (request_id) WHERE request_id <> '';
CREATE INDEX idx_outbox_event_correlation_id ON tb_outbox_event (correlation_id) WHERE correlation_id <> '';
COMMENT ON TABLE tb_outbox_event IS '公共可靠事件 Outbox';
COMMENT ON COLUMN tb_outbox_event.status IS '投递状态 1=待投递, 2=投递中, 3=已投递, 4=投递失败';