数据库详情查询
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+2
-2
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
2026/09/27-14:57:08.137 a0f8 Reusing MANIFEST D:\dndClaw\agent-console\.electron-userdata\Local Storage\leveldb/MANIFEST-000001
|
||||
2026/09/27-14:57:08.169 a0f8 Recovering log #3
|
||||
2026/09/27-14:57:08.171 a0f8 Reusing old log D:\dndClaw\agent-console\.electron-userdata\Local Storage\leveldb/000003.log
|
||||
|
||||
Binary file not shown.
@@ -1,3 +0,0 @@
|
||||
2026/09/27-14:57:08.545 a0f8 Reusing MANIFEST D:\dndClaw\agent-console\.electron-userdata\Session Storage/MANIFEST-000001
|
||||
2026/09/27-14:57:08.546 a0f8 Recovering log #3
|
||||
2026/09/27-14:57:08.546 a0f8 Reusing old log D:\dndClaw\agent-console\.electron-userdata\Session Storage/000003.log
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -34,6 +34,56 @@ export function initDatabase(dbDir: string): Database.Database {
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_llm_active ON llm_configs(is_active);
|
||||
|
||||
-- ========== 从后端同步的表(字段与后端 PostgreSQL 对齐) ==========
|
||||
|
||||
-- 租户信息
|
||||
CREATE TABLE IF NOT EXISTS tenants (
|
||||
id INTEGER PRIMARY KEY, -- 后端 BIGSERIAL
|
||||
name TEXT NOT NULL,
|
||||
code TEXT UNIQUE,
|
||||
status TEXT, -- active / disabled
|
||||
plan TEXT, -- free / pro
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
synced_at TEXT -- 本地同步时间(PC端记录)
|
||||
);
|
||||
|
||||
-- 门店信息
|
||||
CREATE TABLE IF NOT EXISTS stores (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tenant_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
code TEXT NOT NULL,
|
||||
city TEXT,
|
||||
address TEXT,
|
||||
is_flagship INTEGER DEFAULT 0, -- 0/1
|
||||
status TEXT, -- active / preparing / disabled
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
synced_at TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_stores_tenant ON stores(tenant_id);
|
||||
|
||||
-- 用户信息(不同步 password_hash / failed_attempts / locked_until / deleted_at)
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tenant_id INTEGER NOT NULL,
|
||||
username TEXT NOT NULL,
|
||||
phone TEXT,
|
||||
email TEXT,
|
||||
display_name TEXT,
|
||||
role TEXT, -- owner / admin / manager / staff
|
||||
status TEXT, -- active / disabled
|
||||
current_store_id INTEGER,
|
||||
last_login_at TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
synced_at TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_users_tenant ON users(tenant_id);
|
||||
|
||||
-- 同步队列(outbox):本地变更等待推送到云端
|
||||
CREATE TABLE IF NOT EXISTS sync_outbox (
|
||||
id TEXT PRIMARY KEY,
|
||||
|
||||
@@ -0,0 +1,277 @@
|
||||
# SQLite 数据库迁移日志
|
||||
|
||||
> 文件位置:`agent-core/src/db/migrations.md`
|
||||
> 数据库文件:`<userData>/data/agent-console.db`
|
||||
> 每次修改数据库表结构后,必须在本文件追加新的迁移版本记录。
|
||||
|
||||
---
|
||||
|
||||
## 版本历史
|
||||
|
||||
| 版本 | 日期 | 说明 |
|
||||
|------|------|------|
|
||||
| [v1.0.0](#v100---2026-09-27) | 2026-09-27 | 初始建库,建立 6 张表 |
|
||||
|
||||
---
|
||||
|
||||
## v1.0.0 — 2026-09-27
|
||||
|
||||
**变更类型**:初始建库(CREATE TABLE)
|
||||
|
||||
**变更说明**:首次创建 agent-core 的 SQLite 数据库,包含 LLM 配置、同步队列、同步元数据,以及从后端同步的租户/门店/用户表。
|
||||
|
||||
**新增表(6 张)**:
|
||||
|
||||
### 1. `llm_configs` — LLM API 配置表
|
||||
|
||||
**字段清单**:
|
||||
|
||||
| 字段(column) | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | TEXT | PRIMARY KEY | 配置唯一 ID(UUID v4) |
|
||||
| name | TEXT | NOT NULL | 配置显示名称 |
|
||||
| provider | TEXT | NOT NULL | Provider 标识(qianfan_v2 / openai) |
|
||||
| config | TEXT | NOT NULL | 配置 JSON 字符串(baseUrl/authorization/apiKey/model/temperature) |
|
||||
| is_active | INTEGER | DEFAULT 0 | 是否为当前激活配置(1=是,0=否) |
|
||||
| created_at | TEXT | DEFAULT datetime('now') | 创建时间(UTC) |
|
||||
| updated_at | TEXT | DEFAULT datetime('now') | 最后更新时间(UTC) |
|
||||
|
||||
**索引**:`idx_llm_active(is_active)`
|
||||
|
||||
**建表 SQL**:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS llm_configs (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
provider TEXT NOT NULL,
|
||||
config TEXT NOT NULL,
|
||||
is_active INTEGER DEFAULT 0,
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
updated_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_llm_active ON llm_configs(is_active);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 2. `sync_outbox` — 同步队列(outbox)
|
||||
|
||||
**字段清单**:
|
||||
|
||||
| 字段(column) | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PRIMARY KEY AUTOINCREMENT | 自增 ID |
|
||||
| table_name | TEXT | NOT NULL | 变更的表名 |
|
||||
| record_id | TEXT | NOT NULL | 变更记录 ID |
|
||||
| operation | TEXT | NOT NULL | INSERT / UPDATE / DELETE |
|
||||
| payload | TEXT | NOT NULL | 变更数据 JSON |
|
||||
| status | TEXT | NOT NULL DEFAULT 'pending' | pending / syncing / done / failed |
|
||||
| retry_count | INTEGER | DEFAULT 0 | 重试次数 |
|
||||
| last_error | TEXT | | 最后错误信息 |
|
||||
| created_at | TEXT | DEFAULT datetime('now') | 创建时间 |
|
||||
| updated_at | TEXT | DEFAULT datetime('now') | 更新时间 |
|
||||
|
||||
**索引**:
|
||||
- `idx_outbox_status(status)` — 加速查询待同步记录
|
||||
- `idx_outbox_table(table_name)` — 按表名查询
|
||||
|
||||
**建表 SQL**:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS sync_outbox (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
table_name TEXT NOT NULL,
|
||||
record_id TEXT NOT NULL,
|
||||
operation TEXT NOT NULL,
|
||||
payload TEXT NOT NULL,
|
||||
status TEXT NOT NULL DEFAULT 'pending',
|
||||
retry_count INTEGER DEFAULT 0,
|
||||
last_error TEXT,
|
||||
created_at TEXT DEFAULT (datetime('now')),
|
||||
updated_at TEXT DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_outbox_status ON sync_outbox(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_outbox_table ON sync_outbox(table_name);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3. `sync_meta` — 同步元数据
|
||||
|
||||
**字段清单**:
|
||||
|
||||
| 字段(column) | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| table_name | TEXT | PRIMARY KEY | 表名(tenants / stores / users ...) |
|
||||
| last_synced_at | TEXT | NOT NULL | 最后同步时间(ISO 8601) |
|
||||
| last_sync_count | INTEGER | | 本次同步条数 |
|
||||
| sync_status | TEXT | | success / failed |
|
||||
| error_msg | TEXT | | 失败原因 |
|
||||
|
||||
**建表 SQL**:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS sync_meta (
|
||||
table_name TEXT PRIMARY KEY,
|
||||
last_synced_at TEXT NOT NULL,
|
||||
last_sync_count INTEGER,
|
||||
sync_status TEXT,
|
||||
error_msg TEXT
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4. `tenants` — 租户信息(从后端同步)
|
||||
|
||||
**字段清单**:
|
||||
|
||||
| 字段(column) | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PRIMARY KEY | 租户 ID(后端 BIGSERIAL) |
|
||||
| name | TEXT | NOT NULL | 租户名称 |
|
||||
| code | TEXT | UNIQUE | 租户编码 |
|
||||
| status | TEXT | | active / disabled |
|
||||
| plan | TEXT | | free / pro |
|
||||
| created_at | TEXT | | 创建时间 |
|
||||
| updated_at | TEXT | | 更新时间 |
|
||||
| synced_at | TEXT | | 本地同步时间(PC 端记录) |
|
||||
|
||||
**建表 SQL**:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS tenants (
|
||||
id INTEGER PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
code TEXT UNIQUE,
|
||||
status TEXT,
|
||||
plan TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
synced_at TEXT
|
||||
);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 5. `stores` — 门店信息(从后端同步)
|
||||
|
||||
**字段清单**:
|
||||
|
||||
| 字段(column) | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PRIMARY KEY | 门店 ID |
|
||||
| tenant_id | INTEGER | NOT NULL | 所属租户 |
|
||||
| name | TEXT | NOT NULL | 门店名称 |
|
||||
| code | TEXT | NOT NULL | 门店编码 |
|
||||
| city | TEXT | | 所在城市 |
|
||||
| address | TEXT | | 门店地址 |
|
||||
| is_flagship | INTEGER | DEFAULT 0 | 是否旗舰店(0/1) |
|
||||
| status | TEXT | | active / preparing / disabled |
|
||||
| created_at | TEXT | | 创建时间 |
|
||||
| updated_at | TEXT | | 更新时间 |
|
||||
| synced_at | TEXT | | 本地同步时间 |
|
||||
|
||||
**索引**:`idx_stores_tenant(tenant_id)`
|
||||
|
||||
**建表 SQL**:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS stores (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tenant_id INTEGER NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
code TEXT NOT NULL,
|
||||
city TEXT,
|
||||
address TEXT,
|
||||
is_flagship INTEGER DEFAULT 0,
|
||||
status TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
synced_at TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_stores_tenant ON stores(tenant_id);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 6. `users` — 用户信息(从后端同步,不含安全字段)
|
||||
|
||||
**字段清单**:
|
||||
|
||||
| 字段(column) | 类型 | 约束 | 说明 |
|
||||
|------|------|------|------|
|
||||
| id | INTEGER | PRIMARY KEY | 用户 ID |
|
||||
| tenant_id | INTEGER | NOT NULL | 所属租户 |
|
||||
| username | TEXT | NOT NULL | 用户名 |
|
||||
| phone | TEXT | | 手机号 |
|
||||
| email | TEXT | | 邮箱 |
|
||||
| display_name | TEXT | | 显示名 |
|
||||
| role | TEXT | | owner / admin / manager / staff |
|
||||
| status | TEXT | | active / disabled |
|
||||
| current_store_id | INTEGER | | 当前门店 |
|
||||
| last_login_at | TEXT | | 最后登录时间 |
|
||||
| created_at | TEXT | | 创建时间 |
|
||||
| updated_at | TEXT | | 更新时间 |
|
||||
| synced_at | TEXT | | 本地同步时间 |
|
||||
|
||||
**索引**:`idx_users_tenant(tenant_id)`
|
||||
|
||||
**建表 SQL**:
|
||||
```sql
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id INTEGER PRIMARY KEY,
|
||||
tenant_id INTEGER NOT NULL,
|
||||
username TEXT NOT NULL,
|
||||
phone TEXT,
|
||||
email TEXT,
|
||||
display_name TEXT,
|
||||
role TEXT,
|
||||
status TEXT,
|
||||
current_store_id INTEGER,
|
||||
last_login_at TEXT,
|
||||
created_at TEXT,
|
||||
updated_at TEXT,
|
||||
synced_at TEXT
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_users_tenant ON users(tenant_id);
|
||||
```
|
||||
|
||||
> **不同步字段**:后端 `users` 表的 `password_hash`、`failed_attempts`、`locked_until`、`deleted_at` 字段出于安全考虑不同步到本地。
|
||||
|
||||
---
|
||||
|
||||
## 数据库参数
|
||||
|
||||
- **WAL 模式**:已启用(`journal_mode = WAL`)
|
||||
- **外键约束**:已启用(`foreign_keys = ON`)
|
||||
- **同步架构**:本地 SQLite 为权威源,异步推送到云端;云端变更拉取合并到本地
|
||||
|
||||
---
|
||||
|
||||
## 迁移规范
|
||||
|
||||
后续每次修改数据库,按以下格式追加新版本:
|
||||
|
||||
```markdown
|
||||
## vX.Y.Z — YYYY-MM-DD
|
||||
|
||||
**变更类型**:CREATE TABLE / ALTER TABLE / DROP TABLE / INDEX
|
||||
|
||||
**变更说明**:简要说明变更目的
|
||||
|
||||
**变更内容**:
|
||||
- 表名:字段变更详情(含字段清单表格 + SQL 语句)
|
||||
```
|
||||
|
||||
**类型映射规则**(PostgreSQL → SQLite):
|
||||
|
||||
| PostgreSQL | SQLite |
|
||||
|---|---|
|
||||
| BIGSERIAL | INTEGER PRIMARY KEY |
|
||||
| BIGINT / INTEGER | INTEGER |
|
||||
| VARCHAR / TEXT | TEXT |
|
||||
| BOOLEAN | INTEGER (0/1) |
|
||||
| NUMERIC / DECIMAL | REAL |
|
||||
| TIMESTAMPTZ | TEXT (ISO 8601) |
|
||||
| JSONB | TEXT (JSON 字符串) |
|
||||
Reference in New Issue
Block a user