fdb2 1.0.0 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +334 -221
- package/bin/fdb2.js +39 -22
- package/package.json +2 -2
- package/server/service/connection.service.ts +8 -1
- package/server/service/database/cockroachdb.service.ts +659 -0
- package/server/service/database/database.service.ts +120 -0
- package/server/service/database/mongodb.service.ts +454 -0
- package/server/service/database/oracle.service.ts +7 -14
- package/server/service/database/postgres.service.ts +4 -7
- package/server/service/database/sap.service.ts +713 -0
- package/server/service/database/sqlite.service.ts +3 -3
- package/server.js +23 -1
- package/server.pid +1 -0
- package/src/platform/database/components/database-detail.vue +11 -11
- package/src/platform/database/components/table-detail.vue +4 -4
- package/src/platform/database/types/common.ts +1 -1
- package/vite.config.ts +1 -1
- package/bin/docker/.env +0 -4
- package/data/connections.demo.json +0 -32
- package/nw-build.js +0 -120
- package/nw-dev.js +0 -65
- package/src/base//345/237/272/347/241/200/345/261/202.md +0 -7
package/README.md
CHANGED
|
@@ -1,260 +1,373 @@
|
|
|
1
1
|
# 数据库管理工具
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
一款轻量级、跨平台的数据库管理工具,支持多种数据库类型,提供类似 Navicat Premium 的使用体验。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 快速开始
|
|
6
6
|
|
|
7
|
-
###
|
|
8
|
-
- 支持多种数据库类型:MySQL、PostgreSQL、SQLite、SQL Server、Oracle
|
|
9
|
-
- 可视化连接配置界面
|
|
10
|
-
- 连接测试和状态监控
|
|
11
|
-
- 连接信息本地JSON存储
|
|
7
|
+
### 安装
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
-
|
|
16
|
-
- 列信息、索引、外键关系展示
|
|
17
|
-
- 数据库大小和统计信息
|
|
9
|
+
```bash
|
|
10
|
+
# 全局安装(推荐)
|
|
11
|
+
npm install -g fdb2
|
|
18
12
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
- 条件查询和排序
|
|
22
|
-
- 数据插入、编辑、删除
|
|
23
|
-
- 数据导出(JSON、CSV格式)
|
|
13
|
+
# 或使用 yarn
|
|
14
|
+
yarn global add fdb2
|
|
24
15
|
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
|
|
28
|
-
- 查询历史记录
|
|
29
|
-
- 批量查询结果展示
|
|
16
|
+
# 或使用 pnpm
|
|
17
|
+
pnpm add -g fdb2
|
|
18
|
+
```
|
|
30
19
|
|
|
31
|
-
|
|
20
|
+
### 启动服务
|
|
32
21
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
22
|
+
```bash
|
|
23
|
+
# 启动数据库管理工具
|
|
24
|
+
fdb2 start
|
|
25
|
+
|
|
26
|
+
# 停止服务
|
|
27
|
+
fdb2 stop
|
|
28
|
+
|
|
29
|
+
# 查看服务状态
|
|
30
|
+
fdb2 status
|
|
31
|
+
|
|
32
|
+
# 重启服务
|
|
33
|
+
fdb2 restart
|
|
44
34
|
```
|
|
45
35
|
|
|
46
|
-
###
|
|
36
|
+
### 访问应用
|
|
37
|
+
|
|
38
|
+
启动服务后,在浏览器中打开:
|
|
47
39
|
```
|
|
48
|
-
|
|
49
|
-
├── layout.vue # 主布局组件
|
|
50
|
-
├── index.vue # 首页仪表板
|
|
51
|
-
├── connections.vue # 连接管理页面
|
|
52
|
-
├── schemas.vue # 数据库结构页面
|
|
53
|
-
├── query.vue # SQL查询页面
|
|
54
|
-
├── table.vue # 表数据查看页面
|
|
55
|
-
└── router.ts # 路由配置
|
|
56
|
-
|
|
57
|
-
web/src/
|
|
58
|
-
├── service/database.ts # 前端API服务
|
|
59
|
-
├── typings/database.ts # TypeScript类型定义
|
|
60
|
-
└── assets/database.css # 专用样式文件
|
|
40
|
+
http://localhost:3000
|
|
61
41
|
```
|
|
62
42
|
|
|
63
|
-
##
|
|
43
|
+
## 功能特性
|
|
64
44
|
|
|
65
|
-
###
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
45
|
+
### 🔗 连接管理
|
|
46
|
+
- 支持 8 种数据库类型:MySQL、PostgreSQL、SQLite、SQL Server、Oracle、CockroachDB、MongoDB、SAP HANA
|
|
47
|
+
- 可视化连接配置界面,操作简单直观
|
|
48
|
+
- 一键测试连接,快速验证配置
|
|
49
|
+
- 连接信息本地安全存储,无需重复输入
|
|
69
50
|
|
|
70
|
-
###
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
51
|
+
### 🏗️ 数据库结构
|
|
52
|
+
- 清晰的数据库信息概览
|
|
53
|
+
- 详细的表结构查看
|
|
54
|
+
- 完整的列信息、索引、外键关系展示
|
|
55
|
+
- 实时显示数据库大小和统计信息
|
|
74
56
|
|
|
75
|
-
###
|
|
76
|
-
|
|
57
|
+
### 📊 数据操作
|
|
58
|
+
- 表数据快速查看和分页浏览
|
|
59
|
+
- 灵活的条件查询和排序
|
|
60
|
+
- 便捷的数据插入、编辑、删除
|
|
61
|
+
- 支持导出数据为 JSON、CSV 格式
|
|
62
|
+
|
|
63
|
+
### 💻 SQL查询
|
|
64
|
+
- 代码编辑器风格的 SQL 输入框
|
|
65
|
+
- SQL 语法格式化,提升可读性
|
|
66
|
+
- 自动保存查询历史记录
|
|
67
|
+
- 批量查询结果展示
|
|
68
|
+
|
|
69
|
+
### 🎯 核心优势
|
|
70
|
+
- **零配置启动**:全局安装后即可使用,无需复杂配置
|
|
71
|
+
- **跨平台支持**:Windows、macOS、Linux 全平台兼容
|
|
72
|
+
- **轻量高效**:基于 Node.js,资源占用低
|
|
73
|
+
- **本地存储**:数据保存在本地,安全可靠
|
|
74
|
+
- **离线使用**:无需联网即可管理本地数据库
|
|
77
75
|
|
|
78
76
|
## 使用指南
|
|
79
77
|
|
|
80
78
|
### 添加数据库连接
|
|
81
79
|
|
|
82
|
-
1.
|
|
83
|
-
2.
|
|
84
|
-
3.
|
|
85
|
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
|
|
92
|
-
5.
|
|
80
|
+
1. 打开浏览器访问 `http://localhost:3000`
|
|
81
|
+
2. 点击左侧导航的"连接管理"
|
|
82
|
+
3. 点击"新增连接"按钮
|
|
83
|
+
4. 填写连接信息:
|
|
84
|
+
- **连接名称**:自定义名称,便于识别(如:生产环境 MySQL)
|
|
85
|
+
- **数据库类型**:选择对应的数据库类型
|
|
86
|
+
- **主机地址**:数据库服务器地址(本地数据库使用 `localhost` 或 `127.0.0.1`)
|
|
87
|
+
- **端口**:数据库服务端口(会自动填充默认端口)
|
|
88
|
+
- **数据库名称**:要连接的数据库名
|
|
89
|
+
- **用户名/密码**:数据库认证信息
|
|
90
|
+
5. 点击"测试连接"验证配置是否正确
|
|
91
|
+
6. 保存连接配置
|
|
93
92
|
|
|
94
93
|
### 查看数据库结构
|
|
95
94
|
|
|
96
|
-
1.
|
|
95
|
+
1. 在左侧导航选择"数据库结构"
|
|
97
96
|
2. 选择已配置的数据库连接
|
|
98
97
|
3. 选择要查看的数据库
|
|
99
98
|
4. 浏览表列表和详细信息:
|
|
100
|
-
-
|
|
101
|
-
-
|
|
102
|
-
-
|
|
103
|
-
-
|
|
99
|
+
- **表基本信息**:行数、大小等统计信息
|
|
100
|
+
- **列定义**:数据类型、约束、默认值等
|
|
101
|
+
- **索引信息**:主键、唯一索引、普通索引
|
|
102
|
+
- **外键关系**:表之间的关联关系
|
|
104
103
|
|
|
105
|
-
###
|
|
104
|
+
### 查看和编辑表数据
|
|
106
105
|
|
|
107
106
|
1. 在表列表中点击"数据"按钮
|
|
108
107
|
2. 设置查询条件:
|
|
109
|
-
- WHERE
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
3.
|
|
108
|
+
- **WHERE 条件**:输入过滤条件(如:`id > 100`)
|
|
109
|
+
- **排序字段**:指定排序方式(如:`create_time DESC`)
|
|
110
|
+
- **每页显示**:调整分页大小(10/50/100/500)
|
|
111
|
+
3. 点击"查询"按钮执行查询
|
|
113
112
|
4. 支持的操作:
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
117
|
-
-
|
|
118
|
-
-
|
|
113
|
+
- **查看详情**:点击行查看完整数据
|
|
114
|
+
- **编辑记录**:修改数据后保存
|
|
115
|
+
- **删除记录**:删除不需要的数据
|
|
116
|
+
- **插入新数据**:点击"新增"按钮添加数据
|
|
117
|
+
- **导出数据**:选择 JSON 或 CSV 格式导出
|
|
119
118
|
|
|
120
|
-
### SQL查询
|
|
119
|
+
### 执行 SQL 查询
|
|
121
120
|
|
|
122
|
-
1.
|
|
121
|
+
1. 点击左侧导航的"SQL 查询"
|
|
123
122
|
2. 选择数据库连接
|
|
124
|
-
3. 在编辑器中输入SQL语句
|
|
125
|
-
4.
|
|
126
|
-
- Ctrl
|
|
127
|
-
- SQL
|
|
128
|
-
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
-
|
|
157
|
-
- `
|
|
158
|
-
-
|
|
159
|
-
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
###
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
123
|
+
3. 在编辑器中输入 SQL 语句
|
|
124
|
+
4. 快捷操作:
|
|
125
|
+
- **Ctrl + Enter**(Windows)或 **Cmd + Enter**(Mac):快速执行
|
|
126
|
+
- 点击"格式化"按钮:美化 SQL 语句
|
|
127
|
+
- 查看历史记录:点击历史记录按钮选择之前的查询
|
|
128
|
+
5. 查看查询结果,支持导出功能
|
|
129
|
+
|
|
130
|
+
### 常用 SQL 示例
|
|
131
|
+
|
|
132
|
+
```sql
|
|
133
|
+
-- 查询表前 10 条数据
|
|
134
|
+
SELECT * FROM table_name LIMIT 10;
|
|
135
|
+
|
|
136
|
+
-- 按条件查询
|
|
137
|
+
SELECT * FROM users WHERE status = 'active' ORDER BY created_at DESC;
|
|
138
|
+
|
|
139
|
+
-- 统计数据
|
|
140
|
+
SELECT COUNT(*) as total, status FROM users GROUP BY status;
|
|
141
|
+
|
|
142
|
+
-- 插入数据
|
|
143
|
+
INSERT INTO users (name, email, status) VALUES ('张三', 'zhangsan@example.com', 'active');
|
|
144
|
+
|
|
145
|
+
-- 更新数据
|
|
146
|
+
UPDATE users SET status = 'inactive' WHERE last_login < '2024-01-01';
|
|
147
|
+
|
|
148
|
+
-- 删除数据
|
|
149
|
+
DELETE FROM logs WHERE created_at < '2024-01-01';
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## 数据存储位置
|
|
153
|
+
|
|
154
|
+
### 连接配置
|
|
155
|
+
- **默认位置**:`~/.db-tool/connections.json`
|
|
156
|
+
- Windows: `C:\Users\用户名\.db-tool\connections.json`
|
|
157
|
+
- macOS/Linux: `/Users/用户名/.db-tool/connections.json` 或 `/home/用户名/.db-tool/connections.json`
|
|
158
|
+
- **自定义位置**:设置环境变量 `DB_TOOL_DATA_DIR`
|
|
159
|
+
```bash
|
|
160
|
+
# Windows
|
|
161
|
+
set DB_TOOL_DATA_DIR=D:\mydata\dbtool
|
|
162
|
+
|
|
163
|
+
# macOS/Linux
|
|
164
|
+
export DB_TOOL_DATA_DIR=/path/to/custom/data
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 查询历史
|
|
168
|
+
- **存储位置**:浏览器 LocalStorage
|
|
169
|
+
- **自动保存**:每次执行查询后自动保存
|
|
170
|
+
- **数量限制**:最多保存 50 条记录
|
|
171
|
+
|
|
172
|
+
## 支持的数据库类型
|
|
173
|
+
|
|
174
|
+
| 数据库类型 | 默认端口 | 特性 |
|
|
175
|
+
|-----------|---------|------|
|
|
176
|
+
| MySQL | 3306 | 支持存储过程、触发器、视图、全文搜索 |
|
|
177
|
+
| PostgreSQL | 5432 | 支持存储过程、触发器、视图、JSON 类型 |
|
|
178
|
+
| SQLite | - | 轻量级,文件型数据库,无需服务器 |
|
|
179
|
+
| SQL Server | 1433 | 微软数据库,支持存储过程、触发器、视图 |
|
|
180
|
+
| Oracle | 1521 | 企业级数据库,功能强大 |
|
|
181
|
+
| CockroachDB | 26257 | 分布式 SQL 数据库,兼容 PostgreSQL |
|
|
182
|
+
| MongoDB | 27017 | NoSQL 文档数据库 |
|
|
183
|
+
| SAP HANA | 39013 | 内存数据库,高性能分析 |
|
|
184
|
+
|
|
185
|
+
**兼容性说明**:
|
|
186
|
+
- MariaDB、TiDB 兼容 MySQL,选择 MySQL 类型即可
|
|
187
|
+
- Aurora MySQL 兼容 MySQL,选择 MySQL 类型即可
|
|
188
|
+
- Aurora PostgreSQL 兼容 PostgreSQL,选择 PostgreSQL 类型即可
|
|
189
|
+
- Better-SQLite3 兼容 SQLite,选择 SQLite 类型即可
|
|
190
|
+
|
|
191
|
+
## 常见问题
|
|
192
|
+
|
|
193
|
+
### 安装和启动
|
|
194
|
+
|
|
195
|
+
**Q: 安装后无法启动服务?**
|
|
196
|
+
|
|
197
|
+
A: 请检查以下几点:
|
|
198
|
+
1. 确认已正确安装:`npm install -g fdb2`
|
|
199
|
+
2. 检查 Node.js 版本(建议 v14 或更高):`node --version`
|
|
200
|
+
3. 查看错误信息:`fdb2 start --verbose`
|
|
201
|
+
4. 检查端口 3000 是否被占用:`netstat -ano | findstr :3000`(Windows)或 `lsof -i :3000`(Mac/Linux)
|
|
202
|
+
|
|
203
|
+
**Q: 如何更换端口?**
|
|
204
|
+
|
|
205
|
+
A: 可以通过环境变量设置端口:
|
|
206
|
+
```bash
|
|
207
|
+
# Windows
|
|
208
|
+
set PORT=8080
|
|
209
|
+
fdb2 start
|
|
210
|
+
|
|
211
|
+
# Mac/Linux
|
|
212
|
+
PORT=8080 fdb2 start
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
### 连接问题
|
|
216
|
+
|
|
217
|
+
**Q: 连接数据库失败怎么办?**
|
|
218
|
+
|
|
219
|
+
A: 请按以下步骤排查:
|
|
220
|
+
1. 确认数据库服务正在运行
|
|
221
|
+
2. 检查网络连接和端口是否正确
|
|
222
|
+
3. 验证用户名和密码是否正确
|
|
223
|
+
4. 检查数据库是否允许远程连接
|
|
224
|
+
5. 查看数据库防火墙设置
|
|
225
|
+
|
|
226
|
+
**Q: SQLite 数据库连接失败?**
|
|
227
|
+
|
|
228
|
+
A: SQLite 连接需要提供数据库文件路径:
|
|
229
|
+
- 绝对路径:`D:\data\mydb.sqlite`
|
|
230
|
+
- 相对路径:`./data/mydb.sqlite`(相对于数据目录)
|
|
231
|
+
- 确保文件存在且有读取权限
|
|
232
|
+
|
|
233
|
+
### 数据操作
|
|
234
|
+
|
|
235
|
+
**Q: 查询结果为空?**
|
|
236
|
+
|
|
237
|
+
A: 可能的原因:
|
|
238
|
+
1. 表中确实没有数据
|
|
239
|
+
2. WHERE 条件过于严格
|
|
240
|
+
3. 数据库名称或表名错误
|
|
241
|
+
4. 查询权限不足
|
|
242
|
+
|
|
243
|
+
**Q: 无法编辑或删除数据?**
|
|
244
|
+
|
|
245
|
+
A: 请检查:
|
|
246
|
+
1. 是否有足够的数据库权限
|
|
247
|
+
2. 表是否有外键约束
|
|
248
|
+
3. 数据是否被锁定
|
|
249
|
+
4. 查看数据库错误日志
|
|
250
|
+
|
|
251
|
+
### 性能问题
|
|
252
|
+
|
|
253
|
+
**Q: 查询速度很慢?**
|
|
254
|
+
|
|
255
|
+
A: 优化建议:
|
|
256
|
+
1. 添加适当的索引
|
|
257
|
+
2. 限制查询结果数量(使用 LIMIT)
|
|
258
|
+
3. 避免使用 `SELECT *`,只查询需要的字段
|
|
259
|
+
4. 优化 WHERE 条件
|
|
260
|
+
5. 考虑分批处理大数据量
|
|
261
|
+
|
|
262
|
+
**Q: 数据库信息加载很慢?**
|
|
263
|
+
|
|
264
|
+
A: 可能的原因:
|
|
265
|
+
1. 数据库中表数量过多
|
|
266
|
+
2. 表数据量过大
|
|
267
|
+
3. 网络延迟
|
|
268
|
+
4. 数据库性能问题
|
|
269
|
+
|
|
270
|
+
### 数据安全
|
|
271
|
+
|
|
272
|
+
**Q: 连接密码安全吗?**
|
|
273
|
+
|
|
274
|
+
A: 当前版本密码以明文形式存储在本地配置文件中。建议:
|
|
275
|
+
1. 不要在公共电脑上保存敏感数据库连接
|
|
276
|
+
2. 定期更换数据库密码
|
|
277
|
+
3. 使用只读权限的账号进行日常操作
|
|
278
|
+
4. 生产环境建议使用加密连接(SSL/TLS)
|
|
279
|
+
|
|
280
|
+
**Q: 如何备份数据库连接配置?**
|
|
281
|
+
|
|
282
|
+
A: 复制配置文件即可:
|
|
283
|
+
```bash
|
|
284
|
+
# Windows
|
|
285
|
+
copy C:\Users\用户名\.db-tool\connections.json D:\backup\
|
|
286
|
+
|
|
287
|
+
# Mac/Linux
|
|
288
|
+
cp ~/.db-tool/connections.json ~/backup/
|
|
289
|
+
```
|
|
290
|
+
|
|
291
|
+
### 更新和卸载
|
|
292
|
+
|
|
293
|
+
**Q: 如何更新到最新版本?**
|
|
294
|
+
|
|
295
|
+
A: 重新安装即可:
|
|
296
|
+
```bash
|
|
297
|
+
npm update -g fdb2
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
**Q: 如何完全卸载?**
|
|
301
|
+
|
|
302
|
+
A: 执行以下步骤:
|
|
303
|
+
```bash
|
|
304
|
+
# 卸载程序
|
|
305
|
+
npm uninstall -g fdb2
|
|
306
|
+
|
|
307
|
+
# 删除数据目录(可选,会删除所有连接配置)
|
|
308
|
+
# Windows
|
|
309
|
+
rmdir /s C:\Users\用户名\.db-tool
|
|
310
|
+
|
|
311
|
+
# Mac/Linux
|
|
312
|
+
rm -rf ~/.db-tool
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## 高级技巧
|
|
316
|
+
|
|
317
|
+
### 批量操作
|
|
318
|
+
|
|
319
|
+
**批量执行 SQL 文件:**
|
|
320
|
+
```sql
|
|
321
|
+
-- 创建一个 .sql 文件
|
|
322
|
+
USE my_database;
|
|
323
|
+
UPDATE users SET status = 'active' WHERE id > 100;
|
|
324
|
+
DELETE FROM logs WHERE created_at < '2024-01-01';
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
然后在 SQL 查询页面复制粘贴执行。
|
|
328
|
+
|
|
329
|
+
### 数据导出技巧
|
|
330
|
+
|
|
331
|
+
**导出特定字段:**
|
|
332
|
+
```sql
|
|
333
|
+
SELECT id, name, email FROM users WHERE status = 'active';
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**导出并格式化数据:**
|
|
337
|
+
```sql
|
|
338
|
+
SELECT
|
|
339
|
+
id,
|
|
340
|
+
name,
|
|
341
|
+
DATE_FORMAT(created_at, '%Y-%m-%d') as created_date
|
|
342
|
+
FROM users;
|
|
343
|
+
```
|
|
344
|
+
|
|
345
|
+
### 性能监控
|
|
346
|
+
|
|
347
|
+
**查看表大小:**
|
|
348
|
+
```sql
|
|
349
|
+
-- MySQL
|
|
350
|
+
SELECT
|
|
351
|
+
table_name,
|
|
352
|
+
ROUND(((data_length + index_length) / 1024 / 1024), 2) AS size_mb
|
|
353
|
+
FROM information_schema.tables
|
|
354
|
+
WHERE table_schema = 'your_database';
|
|
355
|
+
|
|
356
|
+
-- PostgreSQL
|
|
357
|
+
SELECT
|
|
358
|
+
schemaname,
|
|
359
|
+
tablename,
|
|
360
|
+
pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) AS size
|
|
361
|
+
FROM pg_tables
|
|
362
|
+
WHERE schemaname = 'public';
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
## 获取帮助
|
|
366
|
+
|
|
367
|
+
- **GitHub Issues**: [提交问题](https://github.com/yourusername/fdb2/issues)
|
|
368
|
+
- **文档**: 查看在线文档
|
|
369
|
+
- **社区**: 加入用户交流群
|
|
257
370
|
|
|
258
371
|
---
|
|
259
372
|
|
|
260
|
-
|
|
373
|
+
**享受使用数据库管理工具!如有任何问题,欢迎反馈。**
|
package/bin/fdb2.js
CHANGED
|
@@ -32,37 +32,54 @@ switch (command) {
|
|
|
32
32
|
function startProject() {
|
|
33
33
|
console.log('Starting FDB2 project...');
|
|
34
34
|
|
|
35
|
+
// 检查 PID 文件是否存在,如果存在则说明服务器已经在运行
|
|
36
|
+
const pidFilePath = path.join(projectRoot, 'server.pid');
|
|
37
|
+
if (fs.existsSync(pidFilePath)) {
|
|
38
|
+
try {
|
|
39
|
+
const pid = parseInt(fs.readFileSync(pidFilePath, 'utf8'));
|
|
40
|
+
process.kill(pid, 0);
|
|
41
|
+
console.log('Server is already running with PID:', pid);
|
|
42
|
+
return;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
if (error.code === 'ESRCH') {
|
|
45
|
+
console.log('Cleaning up stale PID file...');
|
|
46
|
+
fs.unlinkSync(pidFilePath);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
35
51
|
// 命令和参数
|
|
36
52
|
let cmd, args;
|
|
37
53
|
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
cmd = 'cmd.exe';
|
|
42
|
-
args = ['/c', 'node', 'server.js', ...commandArgs];
|
|
43
|
-
} else {
|
|
44
|
-
// Linux/macOS 系统
|
|
45
|
-
cmd = 'node';
|
|
46
|
-
args = ['server.js', ...commandArgs];
|
|
47
|
-
}
|
|
54
|
+
// 直接使用 node 命令启动服务器
|
|
55
|
+
cmd = 'node';
|
|
56
|
+
args = ['server.js', ...commandArgs];
|
|
48
57
|
|
|
49
58
|
console.log('Executing:', cmd, args);
|
|
50
59
|
|
|
51
|
-
//
|
|
52
|
-
const
|
|
60
|
+
// 日志文件路径
|
|
61
|
+
const logFilePath = path.join(projectRoot, 'server.log');
|
|
62
|
+
|
|
63
|
+
// 创建日志文件的写入流
|
|
64
|
+
const out = fs.openSync(logFilePath, 'a');
|
|
65
|
+
const err = fs.openSync(logFilePath, 'a');
|
|
66
|
+
|
|
67
|
+
// 使用 node 命令启动服务器(异步,后台运行)
|
|
68
|
+
const child = spawn(cmd, args, {
|
|
53
69
|
cwd: projectRoot,
|
|
54
|
-
|
|
70
|
+
detached: true,
|
|
71
|
+
stdio: ['ignore', out, err]
|
|
55
72
|
});
|
|
56
73
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
74
|
+
// 解除父子进程关联,让子进程在后台独立运行
|
|
75
|
+
child.unref();
|
|
76
|
+
|
|
77
|
+
// 保存 PID 到文件
|
|
78
|
+
fs.writeFileSync(pidFilePath, child.pid.toString());
|
|
79
|
+
|
|
80
|
+
console.log('Server started successfully with PID:', child.pid);
|
|
81
|
+
console.log('Server is running in the background');
|
|
82
|
+
console.log('Logs are written to:', logFilePath);
|
|
66
83
|
}
|
|
67
84
|
|
|
68
85
|
// 停止项目
|