Files
pangolin/server/migrations/sqlite/000008_provision.up.sql
T
wangjia f3471ae139 feat(server/db): 数据层多库支持(1/4)— 连接分派 + 双方言迁移管线
- config 增 DB_DRIVER(mysql 默认 | sqlite);DSN 对 sqlite 为文件路径
- db.OpenDriver 按驱动分派:sqlite 用 modernc(纯 Go 免 CGO)+ WAL/
  busy_timeout/foreign_keys/_txlock=immediate;mysql 路径不变
- store.Open 分派;mysql 保留 UTC/collation 断言,sqlite 跳过
- 迁移拆 migrations/{mysql,sqlite}/ 双套,embed 双 FS,migrate 按驱动选源
  与 golang-migrate 驱动;修复 m.Close() 误关调用方 *sql.DB 的坑
- cmd/migrate 串入 DB_DRIVER;集成测试 MigrateUp 签名更新
- 新增 SQLite 时间往返 smoke 测试与端到端迁移测试(免 docker)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 00:01:03 +08:00

34 lines
1.3 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.
-- 弹性节点基建。附加式变更。
ALTER TABLE nodes ADD COLUMN provider_instance_id TEXT NULL;
ALTER TABLE nodes ADD COLUMN elastic_ip_id TEXT NULL;
-- node_events.event 的 'ip_rotated' 已在 SQLite 基线(000006)预置,无需扩展。
CREATE TABLE provision_idempotency (
idempotency_key TEXT NOT NULL PRIMARY KEY,
node_uuid TEXT NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE replacements (
uuid TEXT NOT NULL PRIMARY KEY,
old_node_id INTEGER NOT NULL,
new_node_id INTEGER NULL,
pool TEXT NOT NULL CHECK (pool IN ('consumable','premium')),
status TEXT NOT NULL DEFAULT 'running' CHECK (status IN ('running','done','failed')),
step TEXT NOT NULL DEFAULT 'open_new',
detail TEXT NULL, -- JSON
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX idx_repl_status ON replacements (status);
CREATE INDEX idx_repl_old_node ON replacements (old_node_id);
-- 等价 MySQL 的 ON UPDATE CURRENT_TIMESTAMPrecursive_triggers 默认关,不会自递归)。
CREATE TRIGGER trg_replacements_updated_at
AFTER UPDATE ON replacements
FOR EACH ROW
BEGIN
UPDATE replacements SET updated_at = CURRENT_TIMESTAMP WHERE uuid = NEW.uuid;
END;