83 lines
3.3 KiB
MySQL
83 lines
3.3 KiB
MySQL
|
|
-- 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;
|
|||
|
|
|