-- SQLite 建表脚本 -- 用于 go-trustlog 数据库持久化模块 -- SQLite 3+ 版本 -- ============================================ -- 1. operation 表 - 操作记录表 -- ============================================ CREATE TABLE IF NOT EXISTS operation ( op_id TEXT NOT NULL PRIMARY KEY, op_actor TEXT, doid TEXT, producer_id TEXT, request_body_hash TEXT, response_body_hash TEXT, sign TEXT, op_source TEXT, op_type TEXT, do_prefix TEXT, do_repository TEXT, client_ip TEXT, -- 客户端IP(可空,仅落库,不存证) server_ip TEXT, -- 服务端IP(可空,仅落库,不存证) trustlog_status TEXT, -- 存证状态:NOT_TRUSTLOGGED / TRUSTLOGGED timestamp DATETIME, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 创建索引 CREATE INDEX IF NOT EXISTS idx_operation_timestamp ON operation(timestamp); CREATE INDEX IF NOT EXISTS idx_operation_status ON operation(trustlog_status); CREATE INDEX IF NOT EXISTS idx_operation_doid ON operation(doid); -- ============================================ -- 2. trustlog_cursor 表 - 游标表(任务发现队列) -- ============================================ CREATE TABLE IF NOT EXISTS trustlog_cursor ( cursor_key TEXT NOT NULL PRIMARY KEY, -- 游标键(如:operation_scan) cursor_value TEXT NOT NULL, -- 游标值(最后处理的时间戳,RFC3339Nano格式) last_updated_at TEXT DEFAULT (datetime('now')) -- 最后更新时间 ); -- 创建索引 CREATE INDEX IF NOT EXISTS idx_cursor_updated_at ON trustlog_cursor(last_updated_at); -- ============================================ -- 3. trustlog_retry 表 - 重试表 -- ============================================ CREATE TABLE IF NOT EXISTS trustlog_retry ( op_id TEXT NOT NULL PRIMARY KEY, retry_count INTEGER DEFAULT 0, -- 重试次数 retry_status TEXT DEFAULT 'PENDING', -- 重试状态:PENDING / RETRYING / DEAD_LETTER last_retry_at DATETIME, -- 上次重试时间 next_retry_at DATETIME, -- 下次重试时间(用于指数退避) error_message TEXT, -- 错误信息 created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 创建索引 CREATE INDEX IF NOT EXISTS idx_retry_status ON trustlog_retry(retry_status); CREATE INDEX IF NOT EXISTS idx_retry_next_retry_at ON trustlog_retry(next_retry_at); -- ============================================ -- 验证查询 -- ============================================ -- 查询所有表 SELECT name FROM sqlite_master WHERE type='table' AND name IN ('operation', 'trustlog_cursor', 'trustlog_retry'); -- 查询 operation 表结构 PRAGMA table_info(operation); -- 查询所有索引 SELECT name, tbl_name FROM sqlite_master WHERE type='index' AND tbl_name IN ('operation', 'trustlog_cursor', 'trustlog_retry') ORDER BY tbl_name, name; -- 查询游标表初始记录 SELECT * FROM trustlog_cursor WHERE id = 1;