057_add_idempotency_records.sql 956 B

123456789101112131415161718192021222324252627
  1. -- 幂等记录表:用于关键写接口的请求去重与结果重放
  2. -- 幂等执行:可重复运行
  3. CREATE TABLE IF NOT EXISTS idempotency_records (
  4. id BIGSERIAL PRIMARY KEY,
  5. scope VARCHAR(128) NOT NULL,
  6. idempotency_key_hash VARCHAR(64) NOT NULL,
  7. request_fingerprint VARCHAR(64) NOT NULL,
  8. status VARCHAR(32) NOT NULL,
  9. response_status INTEGER,
  10. response_body TEXT,
  11. error_reason VARCHAR(128),
  12. locked_until TIMESTAMPTZ,
  13. expires_at TIMESTAMPTZ NOT NULL,
  14. created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  15. updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
  16. );
  17. CREATE UNIQUE INDEX IF NOT EXISTS idx_idempotency_records_scope_key
  18. ON idempotency_records (scope, idempotency_key_hash);
  19. CREATE INDEX IF NOT EXISTS idx_idempotency_records_expires_at
  20. ON idempotency_records (expires_at);
  21. CREATE INDEX IF NOT EXISTS idx_idempotency_records_status_locked_until
  22. ON idempotency_records (status, locked_until);