落地页 hero 驱动行补国产库(TiDB/OceanBase/GaussDB/人大金仓)+ 官网资产入库保全(同 opsxapi,此前被 dist/ 规则漏跟踪)
This commit is contained in:
1 parent
f0d42db359
commit
c14f36ae75
18 files changed
+3861
No files matched your search
Vendored
+194
@@ -0,0 +1,194 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>AI 助手 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 安全与 AI <span>/</span> AI 助手</div>
|
||||
<h1 class="page-title">AI 助手</h1>
|
||||
<div class="page-meta">更新于 2026-09-23</div>
|
||||
<article class="md">
|
||||
<p>AI 面板的目标:让「写不出的 SQL」和「看不懂的 SQL」不再阻塞你。</p>
|
||||
<p>侧栏支持 <strong>Ask | Agent</strong>:Ask 只生成 SQL;Agent 调用与 MCP 同源的只读工具真查库。外部编辑器可用 <code>npx @rlwj-lab/opsxdb-mcp</code> 接入(见应用内《AI 助手》文档)。</p>
|
||||
<h2 id="sec-1">六种动作</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>动作</th>
|
||||
<th>用途</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>生成</td>
|
||||
<td>自然语言 → SQL(「查最近 7 天下单但未支付的用户」)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>解释</td>
|
||||
<td>把一段复杂 SQL 翻译成中文说明</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>优化</td>
|
||||
<td>分析慢查询,给出索引 / 改写建议</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>修复</td>
|
||||
<td>报错信息 + SQL → 修正版本</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>方言</td>
|
||||
<td>MySQL ↔ PostgreSQL 等跨方言转换</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>样例</td>
|
||||
<td>按表结构生成示例查询</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-2">使用方式</h2>
|
||||
<ol>
|
||||
<li>连接库后打开右侧 AI 面板;</li>
|
||||
<li>选择动作,输入需求或粘贴 SQL(可附上对象树上下文);</li>
|
||||
<li>生成结果一键放回编辑器,⌘/Ctrl + Enter 执行。</li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<p><strong>提示</strong>:生成的 SQL 依旧走危险语句确认流程 —— AI 产出与手写 SQL 同等对待,不放宽防护。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-3">接入真实模型</h2>
|
||||
<p>AI 面板支持任何 <strong>OpenAI 兼容协议</strong>的服务(OpenAI / DeepSeek / 通义 / 本地 vLLM 等),回复以 <strong>SSE 流式</strong>逐字输出,等待模型时不再面对空白。</p>
|
||||
<p>配置入口(二选一):</p>
|
||||
<ol>
|
||||
<li>AI 面板右上角「<strong>配置</strong>」:填 Base URL、API Key、模型名,保存后可一键测试;</li>
|
||||
<li>配置文件 <code>~/.opsxdb/ai.json</code>(权限 0600),或环境变量 <code>OPSXDB_AI_PROVIDER / OPSXDB_AI_BASE_URL / OPSXDB_AI_API_KEY / OPSXDB_AI_MODEL</code>。</li>
|
||||
</ol>
|
||||
<blockquote>
|
||||
<p><strong>说明</strong>:未配置 API Key 时回落本地 stub(离线占位,内容为模板演示);AI Key 保存后服务端只回显掩码(<code>sk-***</code>)。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-4">数据流向承诺</h2>
|
||||
<ul>
|
||||
<li>默认只发送你明确提交的内容(附当前库表结构上下文,不含连接凭据);</li>
|
||||
<li>可完全关闭 AI 功能(顶栏隐藏面板即可,无后台请求);</li>
|
||||
<li>使用云端模型时在界面上明确标识,生成 SQL 依旧走危险语句确认流程。</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/security"><span class="pn-label">← 上一页</span><span class="pn-title">安全设计</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/faq"><span class="pn-label">下一页 →</span><span class="pn-title">常见问题</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">六种动作</a>
|
||||
<a class="toc-l2" href="#sec-2">使用方式</a>
|
||||
<a class="toc-l2" href="#sec-3">接入真实模型</a>
|
||||
<a class="toc-l2" href="#sec-4">数据流向承诺</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+246
@@ -0,0 +1,246 @@
|
||||
/* OpsxDB 文档站 —— 清爽专业风格(浅色) */
|
||||
:root {
|
||||
--blue: #059669;
|
||||
--blue-dark: #047857;
|
||||
--blue-soft: rgba(5, 150, 105, 0.08);
|
||||
--bg: #f6f8fb;
|
||||
--panel: #ffffff;
|
||||
--border: #e4e9f1;
|
||||
--text: #1c2434;
|
||||
--text-2: #5b6880;
|
||||
--text-3: #98a2b3;
|
||||
--code-bg: #f3f6fb;
|
||||
--code-border: #e1e8f3;
|
||||
--green: #059669;
|
||||
--amber: #b45309;
|
||||
--red: #dc2626;
|
||||
--sidebar-w: 262px;
|
||||
--toc-w: 220px;
|
||||
--topbar-h: 56px;
|
||||
--radius: 10px;
|
||||
--shadow: 0 1px 3px rgba(16, 24, 40, 0.06), 0 8px 24px rgba(16, 24, 40, 0.05);
|
||||
--mono: "JetBrains Mono", SFMono-Regular, Menlo, Consolas, monospace;
|
||||
}
|
||||
* { box-sizing: border-box; }
|
||||
html { scroll-behavior: smooth; scroll-padding-top: 72px; }
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--text);
|
||||
font-size: 14.5px;
|
||||
line-height: 1.75;
|
||||
}
|
||||
a { color: var(--blue); text-decoration: none; }
|
||||
.i { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; vertical-align: -2px; }
|
||||
a:hover { color: var(--blue-dark); text-decoration: underline; }
|
||||
|
||||
/* ---------- 顶栏 ---------- */
|
||||
.topbar {
|
||||
position: sticky; top: 0; z-index: 50;
|
||||
background: rgba(255, 255, 255, 0.92);
|
||||
backdrop-filter: saturate(1.4) blur(8px);
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.topbar-inner {
|
||||
max-width: 1440px; margin: 0 auto; height: var(--topbar-h);
|
||||
display: flex; align-items: center; gap: 14px; padding: 0 20px;
|
||||
}
|
||||
.menu-btn {
|
||||
display: none; border: 1px solid var(--border); background: #fff;
|
||||
border-radius: 8px; width: 34px; height: 34px; cursor: pointer; color: var(--text-2);
|
||||
place-items: center;
|
||||
}
|
||||
.menu-btn .i { width: 17px; height: 17px; }
|
||||
.brand { display: flex; align-items: center; gap: 9px; text-decoration: none !important; }
|
||||
.brand-logo { display: inline-flex; }
|
||||
.brand-logo svg { display: block; border-radius: 7px; }
|
||||
.brand-name { font-size: 16px; font-weight: 700; color: var(--text); }
|
||||
.brand-name em { font-style: normal; font-weight: 500; color: var(--text-2); margin-left: 2px; }
|
||||
.ver-badge {
|
||||
font-size: 11px; font-weight: 600; color: var(--blue);
|
||||
background: var(--blue-soft); border: 1px solid rgba(5, 150, 105, 0.22);
|
||||
padding: 1px 9px; border-radius: 999px; white-space: nowrap;
|
||||
}
|
||||
.search { position: relative; flex: 1; max-width: 420px; margin-left: 8px; }
|
||||
.search input {
|
||||
width: 100%; height: 36px; border: 1px solid var(--border); border-radius: 9px;
|
||||
background: var(--bg); padding: 0 14px 0 34px; font-size: 13.5px; color: var(--text); outline: none;
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' fill='none' stroke='%2398a2b3' stroke-width='2' viewBox='0 0 24 24'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E");
|
||||
background-repeat: no-repeat; background-position: 12px center;
|
||||
}
|
||||
.search input:focus { border-color: var(--blue); background: #fff; box-shadow: 0 0 0 3px var(--blue-soft); }
|
||||
.search-panel {
|
||||
position: absolute; top: 44px; left: 0; right: 0; background: #fff;
|
||||
border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow);
|
||||
max-height: 420px; overflow: auto; padding: 6px;
|
||||
}
|
||||
.search-item { display: block; padding: 8px 12px; border-radius: 8px; text-decoration: none !important; }
|
||||
.search-item:hover, .search-item.sel { background: var(--blue-soft); }
|
||||
.search-item .si-title { font-weight: 600; color: var(--text); font-size: 13.5px; }
|
||||
.search-item .si-group { color: var(--text-3); font-size: 11px; margin-left: 6px; }
|
||||
.search-item .si-snippet { color: var(--text-2); font-size: 12px; margin-top: 2px; display: block; }
|
||||
.search-empty { padding: 14px; text-align: center; color: var(--text-3); font-size: 13px; }
|
||||
.top-links { margin-left: auto; display: flex; gap: 16px; align-items: center; }
|
||||
.top-links a { font-size: 13.5px; font-weight: 500; }
|
||||
|
||||
/* ---------- 三栏布局 ---------- */
|
||||
.layout {
|
||||
max-width: 1440px; margin: 0 auto; display: grid;
|
||||
grid-template-columns: var(--sidebar-w) minmax(0, 1fr) var(--toc-w);
|
||||
gap: 0 28px; padding: 24px 20px 60px;
|
||||
}
|
||||
|
||||
/* 侧栏 */
|
||||
.sidebar { position: sticky; top: calc(var(--topbar-h) + 24px); align-self: start; max-height: calc(100vh - var(--topbar-h) - 48px); overflow-y: auto; padding-right: 8px; }
|
||||
.sidebar::-webkit-scrollbar { width: 4px; }
|
||||
.sidebar::-webkit-scrollbar-thumb { background: #d6dde8; border-radius: 4px; }
|
||||
.nav-group { margin-bottom: 18px; }
|
||||
.nav-group-title {
|
||||
font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; text-transform: uppercase;
|
||||
color: var(--text-3); padding: 0 10px 6px;
|
||||
}
|
||||
.nav-link {
|
||||
display: block; padding: 6px 10px; border-radius: 8px; font-size: 13.5px;
|
||||
color: var(--text-2); text-decoration: none !important; border-left: 2px solid transparent;
|
||||
}
|
||||
.nav-link:hover { background: rgba(5, 150, 105, 0.06); color: var(--text); }
|
||||
.nav-link.active {
|
||||
background: var(--blue-soft); color: var(--blue-dark); font-weight: 600;
|
||||
border-left-color: var(--blue);
|
||||
}
|
||||
.sidebar-foot { margin-top: 24px; padding: 12px 10px 0; border-top: 1px solid var(--border); font-size: 11.5px; color: var(--text-3); }
|
||||
|
||||
/* 内容 */
|
||||
.content { min-width: 0; max-width: 860px; }
|
||||
.breadcrumb { font-size: 12.5px; color: var(--text-3); margin-bottom: 10px; }
|
||||
.breadcrumb span { margin: 0 6px; }
|
||||
.page-title { font-size: 30px; font-weight: 700; letter-spacing: -0.02em; margin: 0 0 6px; line-height: 1.3; }
|
||||
.page-meta { font-size: 12.5px; color: var(--text-3); margin-bottom: 22px; }
|
||||
|
||||
/* Markdown 排版 */
|
||||
.md h2 { font-size: 21px; font-weight: 700; margin: 38px 0 12px; padding-top: 8px; letter-spacing: -0.01em; }
|
||||
.md h3 { font-size: 16.5px; font-weight: 700; margin: 26px 0 8px; }
|
||||
.md h2 + h3, .md h1 + h2 { margin-top: 18px; }
|
||||
.md p { margin: 10px 0; color: #2a3348; }
|
||||
.md ul, .md ol { padding-left: 22px; margin: 10px 0; }
|
||||
.md li { margin: 5px 0; color: #2a3348; }
|
||||
.md li::marker { color: var(--blue); }
|
||||
.md strong { color: var(--text); }
|
||||
.md hr { border: none; border-top: 1px solid var(--border); margin: 30px 0; }
|
||||
.md img { max-width: 100%; border-radius: var(--radius); border: 1px solid var(--border); }
|
||||
.md blockquote {
|
||||
margin: 14px 0; padding: 10px 16px; border-left: 3px solid var(--blue);
|
||||
background: var(--blue-soft); border-radius: 0 8px 8px 0; color: #33415e;
|
||||
}
|
||||
|
||||
/* 表格 */
|
||||
.md table { border-collapse: collapse; width: 100%; margin: 16px 0; font-size: 13.5px; background: #fff; border-radius: var(--radius); overflow: hidden; box-shadow: 0 0 0 1px var(--border); }
|
||||
.md th, .md td { padding: 9px 14px; text-align: left; border-bottom: 1px solid var(--border); vertical-align: top; }
|
||||
.md th { background: #f7fbf9; font-weight: 600; color: var(--text); white-space: nowrap; }
|
||||
.md tr:last-child td { border-bottom: none; }
|
||||
|
||||
/* 代码块 */
|
||||
.md code { font-family: var(--mono); font-size: 12.8px; background: var(--code-bg); border: 1px solid var(--code-border); border-radius: 5px; padding: 1px 6px; color: #334155; }
|
||||
.md pre {
|
||||
position: relative; background: #0f172a; color: #dbe4f3; border-radius: var(--radius);
|
||||
padding: 16px 16px 14px; overflow-x: auto; margin: 16px 0; font-size: 13px; line-height: 1.65;
|
||||
}
|
||||
.md pre code { background: none; border: none; color: inherit; padding: 0; font-size: inherit; }
|
||||
.md pre .lang-tag {
|
||||
position: absolute; top: 8px; right: 12px; font-size: 10.5px; color: #7c8db0;
|
||||
font-family: var(--mono); text-transform: lowercase; letter-spacing: 0.04em;
|
||||
}
|
||||
.md pre .copy-btn {
|
||||
position: absolute; top: 6px; right: 60px; font-size: 11px; color: #9fb0d0;
|
||||
background: rgba(255, 255, 255, 0.07); border: none; border-radius: 6px; padding: 2px 9px; cursor: pointer;
|
||||
opacity: 0; transition: opacity 0.15s;
|
||||
}
|
||||
.md pre:hover .copy-btn { opacity: 1; }
|
||||
.md pre .copy-btn:hover { color: #fff; background: rgba(255, 255, 255, 0.14); }
|
||||
/* 行内高亮 token */
|
||||
.md pre .tok-key { color: #7dd3fc; }
|
||||
.md pre .tok-str { color: #86efac; }
|
||||
.md pre .tok-num { color: #fcd34d; }
|
||||
.md pre .tok-com { color: #64748b; font-style: italic; }
|
||||
|
||||
/* 提示块(通过 blockquote 首字符约定) */
|
||||
.md blockquote.tip { border-left-color: var(--green); background: rgba(5, 150, 105, 0.07); }
|
||||
.md blockquote.warn { border-left-color: var(--amber); background: rgba(180, 83, 9, 0.07); }
|
||||
|
||||
/* 上下页 */
|
||||
.pn-nav { display: flex; gap: 14px; margin-top: 48px; }
|
||||
.pn {
|
||||
flex: 1; border: 1px solid var(--border); background: #fff; border-radius: var(--radius);
|
||||
padding: 13px 16px; text-decoration: none !important; transition: border-color 0.15s, box-shadow 0.15s;
|
||||
}
|
||||
.pn:hover { border-color: var(--blue); box-shadow: var(--shadow); }
|
||||
.pn.next { text-align: right; }
|
||||
.pn-label { display: block; font-size: 11.5px; color: var(--text-3); }
|
||||
.pn-title { display: block; font-weight: 600; color: var(--text); font-size: 14px; margin-top: 2px; }
|
||||
|
||||
/* 反馈 */
|
||||
.feedback {
|
||||
margin-top: 28px; padding: 16px 18px; border-top: 1px solid var(--border);
|
||||
display: flex; align-items: center; gap: 10px; color: var(--text-2); font-size: 13px; flex-wrap: wrap;
|
||||
}
|
||||
.fb-btn {
|
||||
border: 1px solid var(--border); background: #fff; border-radius: 8px; padding: 5px 12px;
|
||||
font-size: 12.5px; cursor: pointer; color: var(--text-2); transition: all 0.15s;
|
||||
}
|
||||
.fb-btn:hover { border-color: var(--blue); color: var(--blue); }
|
||||
.fb-btn.done { border-color: var(--green); color: var(--green); background: rgba(5, 150, 105, 0.06); }
|
||||
.fb-thanks { color: var(--green); font-size: 12.5px; }
|
||||
|
||||
/* 右侧目录 */
|
||||
.toc { position: sticky; top: calc(var(--topbar-h) + 24px); align-self: start; max-height: calc(100vh - var(--topbar-h) - 48px); overflow-y: auto; padding-top: 34px; }
|
||||
.toc-title { font-size: 11.5px; font-weight: 700; letter-spacing: 0.08em; color: var(--text-3); margin-bottom: 8px; }
|
||||
.toc-nav { display: flex; flex-direction: column; gap: 1px; border-left: 2px solid var(--border); padding-left: 0; }
|
||||
.toc-nav a {
|
||||
font-size: 12.5px; color: var(--text-2); padding: 4px 0 4px 12px; text-decoration: none !important;
|
||||
border-left: 2px solid transparent; margin-left: -2px; line-height: 1.5;
|
||||
}
|
||||
.toc-nav a:hover { color: var(--blue); }
|
||||
.toc-nav a.toc-l3 { padding-left: 26px; font-size: 12px; color: var(--text-3); }
|
||||
.toc-nav a.active { color: var(--blue); border-left-color: var(--blue); font-weight: 600; }
|
||||
.print-btn {
|
||||
margin-top: 18px; width: 100%; border: 1px solid var(--border); background: #fff;
|
||||
border-radius: 8px; padding: 7px; font-size: 12.5px; color: var(--text-2); cursor: pointer;
|
||||
}
|
||||
.print-btn:hover { border-color: var(--blue); color: var(--blue); }
|
||||
|
||||
/* 404 */
|
||||
.doc-404 { display: grid; place-items: center; min-height: 100vh; text-align: center; }
|
||||
.doc-404 h1 { font-size: 56px; margin: 0; color: var(--blue); }
|
||||
.doc-404 .btn {
|
||||
display: inline-block; margin-top: 12px; background: var(--blue); color: #fff;
|
||||
padding: 8px 18px; border-radius: 8px; text-decoration: none !important; font-weight: 600;
|
||||
}
|
||||
|
||||
/* ---------- 响应式 ---------- */
|
||||
@media (max-width: 1200px) {
|
||||
.layout { grid-template-columns: var(--sidebar-w) minmax(0, 1fr); }
|
||||
.toc { display: none; }
|
||||
}
|
||||
@media (max-width: 880px) {
|
||||
.menu-btn { display: inline-grid; place-items: center; }
|
||||
.layout { grid-template-columns: minmax(0, 1fr); padding-top: 12px; }
|
||||
.sidebar {
|
||||
position: fixed; z-index: 60; left: 0; top: var(--topbar-h); bottom: 0;
|
||||
width: 280px; background: #fff; border-right: 1px solid var(--border);
|
||||
padding: 16px; transform: translateX(-100%); transition: transform 0.2s; max-height: none;
|
||||
}
|
||||
.sidebar.open { transform: none; box-shadow: var(--shadow); }
|
||||
.ver-badge { display: none; }
|
||||
.top-links a { font-size: 12.5px; }
|
||||
.page-title { font-size: 24px; }
|
||||
}
|
||||
|
||||
/* ---------- 打印 ---------- */
|
||||
@media print {
|
||||
.topbar, .sidebar, .toc, .pn-nav, .feedback, .menu-btn { display: none !important; }
|
||||
.layout { display: block; max-width: none; padding: 0; }
|
||||
body { background: #fff; }
|
||||
.md pre { background: #f1f5f9 !important; color: #1e293b !important; }
|
||||
.md pre .copy-btn, .md pre .lang-tag { display: none; }
|
||||
}
|
||||
Vendored
+219
@@ -0,0 +1,219 @@
|
||||
/* OpsxDB 文档站交互:搜索 / 代码复制 / 目录高亮 / 反馈 / 移动端导航 */
|
||||
(function () {
|
||||
"use strict";
|
||||
|
||||
/* ---------- 代码块:语言标签 + 复制按钮 + 轻量高亮 ---------- */
|
||||
document.querySelectorAll("article.md pre").forEach(function (pre) {
|
||||
var code = pre.querySelector("code");
|
||||
if (!code) return;
|
||||
var lang = (code.className.match(/language-([\w-]+)/) || [, ""])[1];
|
||||
if (lang) {
|
||||
var tag = document.createElement("span");
|
||||
tag.className = "lang-tag";
|
||||
tag.textContent = lang;
|
||||
pre.appendChild(tag);
|
||||
}
|
||||
// 复制按钮
|
||||
var btn = document.createElement("button");
|
||||
btn.className = "copy-btn";
|
||||
btn.type = "button";
|
||||
btn.textContent = "复制";
|
||||
btn.addEventListener("click", function () {
|
||||
navigator.clipboard.writeText(code.textContent).then(
|
||||
function () {
|
||||
btn.textContent = "已复制 ✓";
|
||||
setTimeout(function () { btn.textContent = "复制"; }, 1400);
|
||||
},
|
||||
function () { btn.textContent = "复制失败"; }
|
||||
);
|
||||
});
|
||||
pre.appendChild(btn);
|
||||
// JSON / bash 轻量高亮
|
||||
if (lang === "json") highlightJSON(code);
|
||||
else if (lang === "bash" || lang === "sh" || lang === "shell") highlightBash(code);
|
||||
});
|
||||
|
||||
function esc(s) {
|
||||
return s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
||||
}
|
||||
function highlightJSON(code) {
|
||||
var src = code.textContent;
|
||||
code.innerHTML = esc(src).replace(
|
||||
/("(?:\\.|[^"\\])*")(\s*:)?|\b(true|false|null)\b|(-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?)/g,
|
||||
function (m, str, colon, kw, num) {
|
||||
if (str && colon) return '<span class="tok-key">' + str + "</span>" + colon;
|
||||
if (str) return '<span class="tok-str">' + str + "</span>";
|
||||
if (kw) return '<span class="tok-num">' + kw + "</span>";
|
||||
if (num) return '<span class="tok-num">' + num + "</span>";
|
||||
return m;
|
||||
}
|
||||
);
|
||||
}
|
||||
function highlightBash(code) {
|
||||
var lines = code.textContent.split("\n");
|
||||
code.innerHTML = lines
|
||||
.map(function (line) {
|
||||
if (/^\s*#/.test(line)) return '<span class="tok-com">' + esc(line) + "</span>";
|
||||
return esc(line).replace(/(^|\s)(-{1,2}[\w-]+)/g, '$1<span class="tok-key">$2</span>');
|
||||
})
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
/* ---------- blockquote 提示样式约定:> **提示** / > **注意** ---------- */
|
||||
document.querySelectorAll("article.md blockquote").forEach(function (bq) {
|
||||
var t = (bq.textContent || "").trim();
|
||||
if (/^(注意|警告|⚠)/.test(t)) bq.classList.add("warn");
|
||||
else if (/^(提示|说明|💡|Tip)/i.test(t)) bq.classList.add("tip");
|
||||
});
|
||||
|
||||
/* ---------- 搜索 ---------- */
|
||||
var input = document.getElementById("search-input");
|
||||
var panel = document.getElementById("search-panel");
|
||||
var entries = null;
|
||||
var selIndex = -1;
|
||||
|
||||
function ensureIndex(cb) {
|
||||
if (entries) return cb();
|
||||
fetch("/docs/search-data.json")
|
||||
.then(function (r) { return r.json(); })
|
||||
.then(function (data) { entries = data; cb(); })
|
||||
.catch(function () { entries = []; cb(); });
|
||||
}
|
||||
|
||||
function snippet(text, q) {
|
||||
var i = text.toLowerCase().indexOf(q);
|
||||
if (i < 0) return text.slice(0, 60) + "…";
|
||||
var start = Math.max(0, i - 24);
|
||||
return (start > 0 ? "…" : "") + text.slice(start, i + q.length + 40) + "…";
|
||||
}
|
||||
|
||||
function doSearch() {
|
||||
var q = input.value.trim().toLowerCase();
|
||||
selIndex = -1;
|
||||
if (!q) { panel.hidden = true; return; }
|
||||
ensureIndex(function () {
|
||||
var hits = [];
|
||||
entries.forEach(function (e) {
|
||||
var titleHit = e.title.toLowerCase().indexOf(q) >= 0;
|
||||
var idx = e.text.toLowerCase().indexOf(q);
|
||||
if (titleHit || idx >= 0) {
|
||||
hits.push({
|
||||
slug: e.slug,
|
||||
title: e.title,
|
||||
group: e.group,
|
||||
score: (titleHit ? 10 : 0) + (idx === 0 ? 3 : 0),
|
||||
snippet: titleHit ? snippet(e.text, q) : snippet(e.text, q),
|
||||
});
|
||||
}
|
||||
});
|
||||
hits.sort(function (a, b) { return b.score - a.score; });
|
||||
hits = hits.slice(0, 8);
|
||||
if (!hits.length) {
|
||||
panel.innerHTML = '<div class="search-empty">没有找到相关内容,换个关键词试试</div>';
|
||||
} else {
|
||||
panel.innerHTML = hits
|
||||
.map(function (h) {
|
||||
return (
|
||||
'<a class="search-item" href="/docs/' + h.slug + '">' +
|
||||
'<span class="si-title">' + h.title + '</span><span class="si-group">' + h.group + "</span>" +
|
||||
'<span class="si-snippet">' + h.snippet + "</span></a>"
|
||||
);
|
||||
})
|
||||
.join("");
|
||||
}
|
||||
panel.hidden = false;
|
||||
});
|
||||
}
|
||||
|
||||
var debounce;
|
||||
if (input) {
|
||||
input.addEventListener("input", function () {
|
||||
clearTimeout(debounce);
|
||||
debounce = setTimeout(doSearch, 160);
|
||||
});
|
||||
input.addEventListener("focus", function () {
|
||||
if (input.value.trim()) doSearch();
|
||||
});
|
||||
input.addEventListener("keydown", function (e) {
|
||||
var items = panel.querySelectorAll(".search-item");
|
||||
if (e.key === "ArrowDown" && items.length) {
|
||||
e.preventDefault();
|
||||
selIndex = Math.min(selIndex + 1, items.length - 1);
|
||||
} else if (e.key === "ArrowUp" && items.length) {
|
||||
e.preventDefault();
|
||||
selIndex = Math.max(selIndex - 1, 0);
|
||||
} else if (e.key === "Enter") {
|
||||
if (selIndex >= 0 && items[selIndex]) { location.href = items[selIndex].href; return; }
|
||||
var first = items[0];
|
||||
if (first) location.href = first.href;
|
||||
return;
|
||||
} else if (e.key === "Escape") {
|
||||
panel.hidden = true;
|
||||
return;
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
items.forEach(function (el, i) { el.classList.toggle("sel", i === selIndex); });
|
||||
});
|
||||
document.addEventListener("click", function (e) {
|
||||
if (!e.target.closest(".search")) panel.hidden = true;
|
||||
});
|
||||
}
|
||||
|
||||
/* ---------- 目录滚动高亮 ---------- */
|
||||
var tocLinks = Array.prototype.slice.call(document.querySelectorAll(".toc-nav a"));
|
||||
if (tocLinks.length && "IntersectionObserver" in window) {
|
||||
var byId = {};
|
||||
tocLinks.forEach(function (a) { byId[a.getAttribute("href").slice(1)] = a; });
|
||||
var io = new IntersectionObserver(
|
||||
function (entries) {
|
||||
entries.forEach(function (en) {
|
||||
if (en.isIntersecting) {
|
||||
tocLinks.forEach(function (a) { a.classList.remove("active"); });
|
||||
var a = byId[en.target.id];
|
||||
if (a) a.classList.add("active");
|
||||
}
|
||||
});
|
||||
},
|
||||
{ rootMargin: "-72px 0px -70% 0px", threshold: 0 }
|
||||
);
|
||||
document.querySelectorAll("article.md h2[id], article.md h3[id]").forEach(function (h) { io.observe(h); });
|
||||
}
|
||||
|
||||
/* ---------- 反馈组件 ---------- */
|
||||
var fb = document.getElementById("feedback");
|
||||
if (fb) {
|
||||
var pageKey = "opsxdb-docs-fb:" + location.pathname;
|
||||
var voted = null;
|
||||
try { voted = localStorage.getItem(pageKey); } catch (e) {}
|
||||
var btns = fb.querySelectorAll(".fb-btn");
|
||||
var thanks = document.getElementById("fb-thanks");
|
||||
function mark(v) {
|
||||
btns.forEach(function (b) {
|
||||
if (b.dataset.v === v) b.classList.add("done");
|
||||
});
|
||||
thanks.hidden = false;
|
||||
try { localStorage.setItem(pageKey, v); } catch (e) {}
|
||||
}
|
||||
if (voted) mark(voted);
|
||||
btns.forEach(function (b) {
|
||||
b.addEventListener("click", function () { mark(b.dataset.v); });
|
||||
});
|
||||
}
|
||||
|
||||
/* ---------- 打印 ---------- */
|
||||
var printBtn = document.getElementById("print-btn");
|
||||
if (printBtn) printBtn.addEventListener("click", function () { window.print(); });
|
||||
|
||||
/* ---------- 移动端侧栏 ---------- */
|
||||
var menuBtn = document.getElementById("menu-btn");
|
||||
var sidebar = document.getElementById("sidebar");
|
||||
if (menuBtn && sidebar) {
|
||||
menuBtn.addEventListener("click", function () { sidebar.classList.toggle("open"); });
|
||||
document.addEventListener("click", function (e) {
|
||||
if (sidebar.classList.contains("open") && !e.target.closest(".sidebar") && !e.target.closest(".menu-btn")) {
|
||||
sidebar.classList.remove("open");
|
||||
}
|
||||
});
|
||||
}
|
||||
})();
|
||||
+198
@@ -0,0 +1,198 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>新建连接 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link active" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 连接与驱动 <span>/</span> 新建连接</div>
|
||||
<h1 class="page-title">新建连接</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>本章说明各数据库类型的连接表单、URL 格式与高级选项(SSL / SSH 隧道)。</p>
|
||||
<h2 id="sec-1">通用流程</h2>
|
||||
<ol>
|
||||
<li>连接选择器点「新建」或选某个数据库类型;</li>
|
||||
<li>填写表单(不同驱动表单不同,见下表);</li>
|
||||
<li><strong>测试</strong> → 通过后 <strong>保存并连接</strong>。</li>
|
||||
</ol>
|
||||
<p>支持直接粘贴 URL 自动填表:</p>
|
||||
<pre><code>mysql://root:pass@127.0.0.1:3306/shop
|
||||
postgres://opsx:pass@127.0.0.1:5432/app
|
||||
</code></pre>
|
||||
<h2 id="sec-2">各驱动表单</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>驱动</th>
|
||||
<th>表单</th>
|
||||
<th>特有字段</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>MySQL / PostgreSQL / SQL Server</td>
|
||||
<td>standard</td>
|
||||
<td>host · port · user · password · database · ssl · ssh</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Oracle</td>
|
||||
<td>oracle</td>
|
||||
<td>host · port · user · password · <strong>service</strong>(如 ORCL)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQLite</td>
|
||||
<td>file</td>
|
||||
<td>database 填本地文件路径(如 <code>~/data/demo.sqlite</code>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redis</td>
|
||||
<td>redis</td>
|
||||
<td>host · port · password · database 序号 · <strong>模式</strong>(单机 / 哨兵 / 集群)· 键分隔符</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>表单只收集服务端实际消费的字段;历史遗留的死参数不会出现在表单里。</p>
|
||||
<h2 id="sec-3">MySQL 族与 PostgreSQL 族</h2>
|
||||
<p>协议兼容的国产库无需单独驱动,直接复用家族驱动:</p>
|
||||
<ul>
|
||||
<li><strong>MySQL 族</strong>:MariaDB(3307)、TiDB(4000)、OceanBase(2881)、PolarDB / TDSQL(3306)—— 表单里选对应类型即可;</li>
|
||||
<li><strong>PostgreSQL 族</strong>:GaussDB / openGauss、人大金仓 Kingbase(54321)—— 走 postgres 表单,注意默认库与用户名差异。</li>
|
||||
</ul>
|
||||
<h2 id="sec-4">SSL / TLS</h2>
|
||||
<p>连接表单中开启 <strong>ssl</strong> 即可;按连接独立配置,互不影响。内网自签证书场景按需放宽校验策略。</p>
|
||||
<h2 id="sec-5">SSH 隧道</h2>
|
||||
<p>数据库在跳板机后面时,开启 <strong>ssh</strong> 字段组,填写跳板机地址与凭据:OpsxDB 会先建 SSH 隧道,再把数据库连接走隧道转发,无需把库端口暴露到公网。</p>
|
||||
<h2 id="sec-6">Redis 哨兵与集群</h2>
|
||||
<ul>
|
||||
<li><strong>哨兵</strong>:模式选 Sentinel,填写 Sentinel 节点列表(<code>host:port</code>,多行)和主节点名 <code>masterName</code>;</li>
|
||||
<li><strong>集群</strong>:模式选 Cluster,填写至少一个种子节点。对象树只显示 DB 0(Cluster 无 <code>SELECT</code>);</li>
|
||||
<li>单机模式只填 host/port,与原先一致。</li>
|
||||
</ul>
|
||||
<p>字段细节与键浏览见 <a href="redis">Redis 工作台</a>。</p>
|
||||
<blockquote>
|
||||
<p><strong>提示</strong>:连接保存后,后续查询仅携带 <code>sessionId</code>,账密不会随每次请求上送;密码在本机混淆存储。</p>
|
||||
</blockquote>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/interface"><span class="pn-label">← 上一页</span><span class="pn-title">界面导览</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/drivers"><span class="pn-label">下一页 →</span><span class="pn-title">驱动支持</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">通用流程</a>
|
||||
<a class="toc-l2" href="#sec-2">各驱动表单</a>
|
||||
<a class="toc-l2" href="#sec-3">MySQL 族与 PostgreSQL 族</a>
|
||||
<a class="toc-l2" href="#sec-4">SSL / TLS</a>
|
||||
<a class="toc-l2" href="#sec-5">SSH 隧道</a>
|
||||
<a class="toc-l2" href="#sec-6">Redis 哨兵与集群</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
+341
@@ -0,0 +1,341 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>驱动支持 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 连接与驱动 <span>/</span> 驱动支持</div>
|
||||
<h1 class="page-title">驱动支持</h1>
|
||||
<div class="page-meta">更新于 2026-09-23</div>
|
||||
<article class="md">
|
||||
<p>OpsxDB 当前支持 18 种数据库,覆盖关系型、NoSQL、时序/搜索与国产库,全部经真实实例端到端验收(ready + verified)。常用引擎以原生 Go 驱动编译内置,开箱即用;JVM 系数据库通过 Agent 桥按需接入。</p>
|
||||
<h2 id="sec-1">完整支持矩阵</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>数据库</th>
|
||||
<th>类型</th>
|
||||
<th>接入方式</th>
|
||||
<th>默认端口</th>
|
||||
<th>状态</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>MySQL</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置</td>
|
||||
<td>3306</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>MariaDB</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置</td>
|
||||
<td>3307</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TiDB</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置</td>
|
||||
<td>4000</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PostgreSQL</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置</td>
|
||||
<td>5432</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQL Server</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置</td>
|
||||
<td>1433</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Oracle</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置(go-ora,不引入 JVM)</td>
|
||||
<td>1521</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQLite</td>
|
||||
<td>关系型</td>
|
||||
<td>原生内置(本地文件)</td>
|
||||
<td>—</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>MongoDB</td>
|
||||
<td>NoSQL</td>
|
||||
<td>Agent 桥(官方驱动)</td>
|
||||
<td>27017</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redis</td>
|
||||
<td>NoSQL</td>
|
||||
<td>原生内置</td>
|
||||
<td>6379</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Elasticsearch</td>
|
||||
<td>时序/搜索</td>
|
||||
<td>原生内置(SQL API)</td>
|
||||
<td>9200</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ZooKeeper</td>
|
||||
<td>时序/搜索</td>
|
||||
<td>Agent 桥</td>
|
||||
<td>2181</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>InfluxDB</td>
|
||||
<td>时序/搜索</td>
|
||||
<td>原生内置(Flux)</td>
|
||||
<td>8086</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>达梦 DM</td>
|
||||
<td>国产库</td>
|
||||
<td>Agent 桥(JDBC)</td>
|
||||
<td>5236</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>OceanBase</td>
|
||||
<td>国产库</td>
|
||||
<td>原生内置(MySQL 协议族)</td>
|
||||
<td>2881</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>GaussDB / openGauss</td>
|
||||
<td>国产库</td>
|
||||
<td>原生内置(PG 协议族)</td>
|
||||
<td>5432</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>PolarDB</td>
|
||||
<td>国产库</td>
|
||||
<td>原生内置(MySQL 协议族)</td>
|
||||
<td>3306</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>TDSQL</td>
|
||||
<td>国产库</td>
|
||||
<td>原生内置(MySQL 协议族)</td>
|
||||
<td>3306</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Kingbase</td>
|
||||
<td>国产库</td>
|
||||
<td>原生内置(PG 协议族)</td>
|
||||
<td>54321</td>
|
||||
<td>✅ 已验收</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-2">协议族复用</h2>
|
||||
<p>MySQL 族(MySQL / MariaDB / TiDB / OceanBase / PolarDB / TDSQL)共用同一原生驱动,PostgreSQL 族(PostgreSQL / GaussDB / openGauss / Kingbase)同理 —— 同族引擎的连接体验与能力完全一致,仅默认端口不同。</p>
|
||||
<h2 id="sec-3">Agent 桥驱动(按需下载)</h2>
|
||||
<p>MongoDB、ZooKeeper、达梦通过 JVM Agent 桥接入:</p>
|
||||
<ul>
|
||||
<li>首次使用时在<strong>驱动管理器</strong>按需下载对应组件,版本固定并做 sha256 校验(Gitee 主源 + GitHub 备源);</li>
|
||||
<li>商业数据库(如达梦官方 JDBC)不代下,需自备 jar 放入驱动目录;</li>
|
||||
<li>Agent 进程随会话池化管理,崩溃自动摘除重建,应用退出级联清理。</li>
|
||||
</ul>
|
||||
<h2 id="sec-4">各引擎能力边界</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>引擎</th>
|
||||
<th>浏览</th>
|
||||
<th>执行</th>
|
||||
<th>写入</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>关系型全家</td>
|
||||
<td>库/表/视图/存储过程/索引/外键/触发器</td>
|
||||
<td>SQL</td>
|
||||
<td>✅(含结果集编辑回写)</td>
|
||||
<td>MySQL 族附执行计划</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redis</td>
|
||||
<td>键树(SCAN 游标)/ TTL</td>
|
||||
<td>命令编辑器</td>
|
||||
<td>✅</td>
|
||||
<td>单机 / Sentinel / Cluster 三模式;危险命令族拦截</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>MongoDB</td>
|
||||
<td>库/集合</td>
|
||||
<td><code>db.coll.find()</code> DSL</td>
|
||||
<td>✅(增删改单文档)</td>
|
||||
<td>官方驱动经 Agent 桥</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ZooKeeper</td>
|
||||
<td>路径树</td>
|
||||
<td>GET / SET</td>
|
||||
<td>✅(写动词二次确认)</td>
|
||||
<td>经 Agent 桥</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Elasticsearch</td>
|
||||
<td>索引浏览</td>
|
||||
<td>SQL API</td>
|
||||
<td>只读</td>
|
||||
<td>官方 JDBC 付费,故走原生 SQL API</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>InfluxDB</td>
|
||||
<td>org/bucket 浏览</td>
|
||||
<td>Flux 脚本</td>
|
||||
<td>只读</td>
|
||||
<td>用户=org、密码=token</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p><strong>说明(Oracle)</strong>:go-ora 纯 Go 驱动,无需安装 Java;Apple Silicon 容器环境起 Oracle XE 会遇到 ORA-00442 属环境限制,x86 或真实实例不受影响。</p>
|
||||
</blockquote>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/connect"><span class="pn-label">← 上一页</span><span class="pn-title">新建连接</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/workbench"><span class="pn-label">下一页 →</span><span class="pn-title">SQL 工作台</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">完整支持矩阵</a>
|
||||
<a class="toc-l2" href="#sec-2">协议族复用</a>
|
||||
<a class="toc-l2" href="#sec-3">Agent 桥驱动(按需下载)</a>
|
||||
<a class="toc-l2" href="#sec-4">各引擎能力边界</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+158
@@ -0,0 +1,158 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>常见问题 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link active" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 参考 <span>/</span> 常见问题</div>
|
||||
<h1 class="page-title">常见问题</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<h2 id="sec-1">产品形态</h2>
|
||||
<p><strong>Q:能在浏览器里操作数据库吗?</strong><br>
|
||||
不能。OpsxDB 客户端唯一形态是桌面 App(Tauri 2);浏览器只承载官网与文档(由本地后端 <code>:8788</code> 内置提供)。开发时的 <code>:5174</code> 只是桌面 devUrl 的资产服务,不是网页客户端。</p>
|
||||
<p><strong>Q:官网和文档部署在哪?</strong><br>
|
||||
就内置在你运行的那个二进制里:<code>http://127.0.0.1:8788/</code> 是官网,<code>/docs</code> 是文档;无需额外部署。</p>
|
||||
<p><strong>Q:怎么打安装包?</strong><br>
|
||||
<code>./run.sh package</code> 产出 Tauri 安装包(DMG)并内嵌 sidecar 后端二进制。</p>
|
||||
<h2 id="sec-2">数据与安全</h2>
|
||||
<p><strong>Q:我的连接密码存在哪?</strong><br>
|
||||
本机,混淆存储;查询只带会话 ID,密码不会随请求重复上送,也不会同步到云端。</p>
|
||||
<p><strong>Q:会上传我的 SQL 或查询结果吗?</strong><br>
|
||||
不会。没有遥测、没有账号、没有云依赖。AI 助手为可选功能:只有你主动配置了模型服务并主动提问时,才会把当次请求(含库表结构上下文,不含连接凭据)发给你指定的服务地址。</p>
|
||||
<p><strong>Q:能在公司内网用吗?</strong><br>
|
||||
能。单二进制 + 内置静态页,无外部依赖;默认只监听回环地址,对外需显式配置。</p>
|
||||
<h2 id="sec-3">驱动相关</h2>
|
||||
<p><strong>Q:Oracle 能用吗?</strong><br>
|
||||
驱动代码就绪(go-ora 纯 Go 实现,无需 JVM),但本机 docker 验收在 Apple Silicon 上受镜像限制未通过(ORA-00442),需 x86 环境或真库完成验收,详见《驱动支持》。</p>
|
||||
<p><strong>Q:达梦 / MongoDB 什么时候支持?</strong><br>
|
||||
已列入路线:长尾库(达梦、MongoDB、ZooKeeper、ES、InfluxDB)规划 agent 按需接入,驱动分发走独立仓库并校验 sha256。</p>
|
||||
<p><strong>Q:MySQL 族 / PG 族的国产库怎么连?</strong><br>
|
||||
协议兼容直接复用家族驱动:TiDB / OceanBase / PolarDB / TDSQL 选对应类型(MySQL 协议);GaussDB / Kingbase 走 PostgreSQL 表单。注意各自默认端口与用户名差异。</p>
|
||||
<h2 id="sec-4">其他</h2>
|
||||
<p><strong>Q:和 OpsxAPI 是什么关系?</strong><br>
|
||||
同一团队的姊妹项目:OpsxAPI 是接口工作台,OpsxDB 是数据库工作台,共用一套 monorepo 脚手架(web + Gin + 可选 Tauri),产品面各自独立。</p>
|
||||
<p><strong>Q:快捷键有哪些?</strong><br>
|
||||
核心就一个:⌘/Ctrl + Enter 执行当前语句或选区;双击结果单元格复制。完整列表见《SQL 工作台》。</p>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/ai"><span class="pn-label">← 上一页</span><span class="pn-title">AI 助手</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/shortcuts"><span class="pn-label">下一页 →</span><span class="pn-title">快捷键</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">产品形态</a>
|
||||
<a class="toc-l2" href="#sec-2">数据与安全</a>
|
||||
<a class="toc-l2" href="#sec-3">驱动相关</a>
|
||||
<a class="toc-l2" href="#sec-4">其他</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+222
@@ -0,0 +1,222 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>产品介绍 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link active" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 开始使用 <span>/</span> 产品介绍</div>
|
||||
<h1 class="page-title">产品介绍</h1>
|
||||
<div class="page-meta">更新于 2026-09-23</div>
|
||||
<article class="md">
|
||||
<p>OpsxDB 是一款<strong>本地优先</strong>的桌面数据库工作台,面向运维与开发:连库、写 SQL、看结果,全在本机完成。</p>
|
||||
<p>主交付形态是可安装的桌面应用(Tauri 2),本地 Go 后端随应用自动启动;同一套界面也可用单个二进制在 Web / 内网部署。数据全部保存在本机,不经过任何第三方服务器。</p>
|
||||
<h2 id="sec-1">功能总览</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>能力</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>18 种数据库</td>
|
||||
<td>关系型 / NoSQL / 时序·搜索 / 国产库,全部端到端验收;常用引擎原生内置</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>连接选择器</td>
|
||||
<td>搜索 / 分类 / 最近 / 图标网格;粘贴连接 URL 一键填入表单;连接颜色标记区分环境</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQL 工作台</td>
|
||||
<td>CodeMirror 编辑器、⌘/Ctrl+Enter 执行语句或选区、多 Tab、可拖分栏、格式化、执行历史</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>对象树</td>
|
||||
<td>懒加载库 / 表 / 列 / 索引 / 触发器;点表名直接看前 100 行;右键管理对象</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结果处理</td>
|
||||
<td>单元格编辑回写 / 右键复制(值·行·JSON·INSERT)/ CSV·JSON·INSERT 导出 / 过滤构建器 / 分页</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redis 工作台</td>
|
||||
<td>单机 / Sentinel / Cluster;键树浏览(SCAN 游标)、TTL、Hash/JSON 编辑、危险命令拦截</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>安全通道</td>
|
||||
<td>每连接独立配置 SSL/TLS 与 SSH 隧道;后端本机监听 + 访问令牌</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AI 助手</td>
|
||||
<td>生成 / 解释 / 优化 / 修复 / 方言转换 / 样例;OpenAI 兼容协议 + SSE 流式输出</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>危险操作防护</td>
|
||||
<td>DROP / TRUNCATE / 无 WHERE 的 UPDATE·DELETE 执行前确认</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>桌面唯一形态</td>
|
||||
<td>桌面 GUI(Tauri 2),本地后端随应用自动拉起</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-2">支持的数据库</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>家族</th>
|
||||
<th>覆盖</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>关系型</td>
|
||||
<td>MySQL · MariaDB · TiDB · PostgreSQL · SQL Server · Oracle · SQLite</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NoSQL</td>
|
||||
<td>Redis · MongoDB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>时序 / 搜索</td>
|
||||
<td>Elasticsearch · ZooKeeper · InfluxDB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>国产库</td>
|
||||
<td>达梦 DM · OceanBase · GaussDB / openGauss · PolarDB · TDSQL · Kingbase</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p>逐引擎的接入方式、默认端口与能力边界见《<a href="/docs/drivers">驱动支持</a>》;全部 18 引擎均已实测验收。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-3">为什么选 OpsxDB</h2>
|
||||
<ul>
|
||||
<li><strong>数据主权</strong>:连接配置与查询历史只存在本机;后端默认仅监听 127.0.0.1。</li>
|
||||
<li><strong>开箱即用</strong>:桌面版双击即用,本地后端随应用自动拉起;官网与文档也由它内置提供。</li>
|
||||
<li><strong>为快设计</strong>:点表即看数据、⌘Enter 即执行、结果三键取走(复制 / CSV / INSERT)。</li>
|
||||
<li><strong>轻量克制</strong>:一个 Go 二进制 + 一份前端,内网可部署,无遥测无账号。</li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p><strong>提示</strong>:想马上动手?直接看下一章《快速开始》,30 秒连上第一个库。</p>
|
||||
</blockquote>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
<span class="pn"></span>
|
||||
|
||||
<a class="pn next" href="/docs/quickstart"><span class="pn-label">下一页 →</span><span class="pn-title">快速开始</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">功能总览</a>
|
||||
<a class="toc-l2" href="#sec-2">支持的数据库</a>
|
||||
<a class="toc-l2" href="#sec-3">为什么选 OpsxDB</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
+189
@@ -0,0 +1,189 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>界面导览 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 开始使用 <span>/</span> 界面导览</div>
|
||||
<h1 class="page-title">界面导览</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>OpsxDB 的界面为「高频操作」设计:从打开应用到看到数据,路径越短越好。</p>
|
||||
<h2 id="sec-1">连接选择器</h2>
|
||||
<p>启动后的第一个界面:</p>
|
||||
<ul>
|
||||
<li><strong>搜索</strong>:按名称快速过滤已保存的连接;</li>
|
||||
<li><strong>分类</strong>:关系型 / NoSQL / 国产库 / 时序·搜索 分组浏览;</li>
|
||||
<li><strong>最近</strong>:最近使用的连接排在最前;</li>
|
||||
<li><strong>图标网格</strong>:按数据库类型直选,未就绪的类型会标注「未就绪」(仅可保存配置);</li>
|
||||
<li><strong>URL 填入</strong>:粘贴 <code>mysql://user:pass@host:3306/db</code> 点「填入」,字段自动拆解。</li>
|
||||
</ul>
|
||||
<h2 id="sec-2">工作台布局</h2>
|
||||
<p>连接成功后进入工作台,三栏结构:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>区域</th>
|
||||
<th>内容</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>左侧</td>
|
||||
<td>连接列表 + 对象树(库 → 表 → 列,懒加载)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>中部</td>
|
||||
<td>SQL 编辑器(多 Tab)+ 结果面板,可拖动分栏</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>右侧</td>
|
||||
<td>AI 面板(生成 / 解释 / 优化 / 修复 / 方言 / 样例)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-3">对象树</h2>
|
||||
<ul>
|
||||
<li>点<strong>表名</strong>:直接打开前 100 行数据;</li>
|
||||
<li>展开<strong>表</strong>:查看列结构;</li>
|
||||
<li><strong>右键表</strong>:打开表 / 查看 DDL / 生成 SQL(SELECT·INSERT·UPDATE·DELETE)/ 重命名 / 克隆表结构·克隆表(含数据)/ 清空 / 截断 / 删除 —— 危险项红色并二次确认;</li>
|
||||
<li><strong>右键库</strong>:新建查询 / 新建表(生成 CREATE TABLE 模板到编辑器)/ 复制 / 设为默认库 / 刷新 / 删除库;</li>
|
||||
<li>Redis:按键分隔符编文件夹,点键打开类型化详情(TTL / JSON / 增删字段);</li>
|
||||
<li>库列表懒加载,大实例也不卡。</li>
|
||||
</ul>
|
||||
<h2 id="sec-4">编辑器与结果</h2>
|
||||
<ul>
|
||||
<li>CodeMirror 语法高亮,⌘/Ctrl+Enter 执行<strong>当前语句或选区</strong>(不是整页脚本);</li>
|
||||
<li>多 Tab 并行查询,互不阻塞;</li>
|
||||
<li>结果面板:复制 / CSV / INSERT 三种取数方式,双击单元格复制;</li>
|
||||
<li>超过截断阈值时结果有明确提示。</li>
|
||||
</ul>
|
||||
<h2 id="sec-5">个性化</h2>
|
||||
<ul>
|
||||
<li>深色 / 浅色主题切换;</li>
|
||||
<li>Tab 布局与主题选择持久化,下次打开保持原样;</li>
|
||||
<li>查询历史本地留存,可回跳重跑。</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/quickstart"><span class="pn-label">← 上一页</span><span class="pn-title">快速开始</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/connect"><span class="pn-label">下一页 →</span><span class="pn-title">新建连接</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">连接选择器</a>
|
||||
<a class="toc-l2" href="#sec-2">工作台布局</a>
|
||||
<a class="toc-l2" href="#sec-3">对象树</a>
|
||||
<a class="toc-l2" href="#sec-4">编辑器与结果</a>
|
||||
<a class="toc-l2" href="#sec-5">个性化</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+222
@@ -0,0 +1,222 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>产品介绍 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link active" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 开始使用 <span>/</span> 产品介绍</div>
|
||||
<h1 class="page-title">产品介绍</h1>
|
||||
<div class="page-meta">更新于 2026-09-23</div>
|
||||
<article class="md">
|
||||
<p>OpsxDB 是一款<strong>本地优先</strong>的桌面数据库工作台,面向运维与开发:连库、写 SQL、看结果,全在本机完成。</p>
|
||||
<p>主交付形态是可安装的桌面应用(Tauri 2),本地 Go 后端随应用自动启动;同一套界面也可用单个二进制在 Web / 内网部署。数据全部保存在本机,不经过任何第三方服务器。</p>
|
||||
<h2 id="sec-1">功能总览</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>能力</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>18 种数据库</td>
|
||||
<td>关系型 / NoSQL / 时序·搜索 / 国产库,全部端到端验收;常用引擎原生内置</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>连接选择器</td>
|
||||
<td>搜索 / 分类 / 最近 / 图标网格;粘贴连接 URL 一键填入表单;连接颜色标记区分环境</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>SQL 工作台</td>
|
||||
<td>CodeMirror 编辑器、⌘/Ctrl+Enter 执行语句或选区、多 Tab、可拖分栏、格式化、执行历史</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>对象树</td>
|
||||
<td>懒加载库 / 表 / 列 / 索引 / 触发器;点表名直接看前 100 行;右键管理对象</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结果处理</td>
|
||||
<td>单元格编辑回写 / 右键复制(值·行·JSON·INSERT)/ CSV·JSON·INSERT 导出 / 过滤构建器 / 分页</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Redis 工作台</td>
|
||||
<td>单机 / Sentinel / Cluster;键树浏览(SCAN 游标)、TTL、Hash/JSON 编辑、危险命令拦截</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>安全通道</td>
|
||||
<td>每连接独立配置 SSL/TLS 与 SSH 隧道;后端本机监听 + 访问令牌</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>AI 助手</td>
|
||||
<td>生成 / 解释 / 优化 / 修复 / 方言转换 / 样例;OpenAI 兼容协议 + SSE 流式输出</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>危险操作防护</td>
|
||||
<td>DROP / TRUNCATE / 无 WHERE 的 UPDATE·DELETE 执行前确认</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>桌面唯一形态</td>
|
||||
<td>桌面 GUI(Tauri 2),本地后端随应用自动拉起</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-2">支持的数据库</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>家族</th>
|
||||
<th>覆盖</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>关系型</td>
|
||||
<td>MySQL · MariaDB · TiDB · PostgreSQL · SQL Server · Oracle · SQLite</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>NoSQL</td>
|
||||
<td>Redis · MongoDB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>时序 / 搜索</td>
|
||||
<td>Elasticsearch · ZooKeeper · InfluxDB</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>国产库</td>
|
||||
<td>达梦 DM · OceanBase · GaussDB / openGauss · PolarDB · TDSQL · Kingbase</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p>逐引擎的接入方式、默认端口与能力边界见《<a href="/docs/drivers">驱动支持</a>》;全部 18 引擎均已实测验收。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-3">为什么选 OpsxDB</h2>
|
||||
<ul>
|
||||
<li><strong>数据主权</strong>:连接配置与查询历史只存在本机;后端默认仅监听 127.0.0.1。</li>
|
||||
<li><strong>开箱即用</strong>:桌面版双击即用,本地后端随应用自动拉起;官网与文档也由它内置提供。</li>
|
||||
<li><strong>为快设计</strong>:点表即看数据、⌘Enter 即执行、结果三键取走(复制 / CSV / INSERT)。</li>
|
||||
<li><strong>轻量克制</strong>:一个 Go 二进制 + 一份前端,内网可部署,无遥测无账号。</li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p><strong>提示</strong>:想马上动手?直接看下一章《快速开始》,30 秒连上第一个库。</p>
|
||||
</blockquote>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
<span class="pn"></span>
|
||||
|
||||
<a class="pn next" href="/docs/quickstart"><span class="pn-label">下一页 →</span><span class="pn-title">快速开始</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">功能总览</a>
|
||||
<a class="toc-l2" href="#sec-2">支持的数据库</a>
|
||||
<a class="toc-l2" href="#sec-3">为什么选 OpsxDB</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
+190
@@ -0,0 +1,190 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>快速开始 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 开始使用 <span>/</span> 快速开始</div>
|
||||
<h1 class="page-title">快速开始</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>本章从零到出结果:起服务 → 建连接 → 执行第一条 SQL。</p>
|
||||
<h2 id="sec-1">1. 启动</h2>
|
||||
<p>桌面版(主交付形态)双击 OpsxDB 应用即可,本地后端随应用自动拉起。</p>
|
||||
<p>从源码运行(开发):</p>
|
||||
<pre><code class="language-bash">git clone <repo> opsxdb && cd opsxdb
|
||||
npm install
|
||||
|
||||
./run.sh gui # 桌面形态(开发):Tauri 窗口 + 本地后端
|
||||
./run.sh web # 仅启动官网与文档 → http://127.0.0.1:8788/
|
||||
./run.sh package # 打桌面安装包(DMG,内嵌后端)
|
||||
</code></pre>
|
||||
<blockquote>
|
||||
<p><strong>注意</strong>:客户端只在桌面 App 里运行。<code>./run.sh gui</code> 起的 <code>:5174</code> 是桌面 devUrl 的资产服务,不是浏览器客户端;浏览器只用于官网 <code>/</code> 与文档 <code>/docs</code>(后端 <code>:8788</code> 直接提供)。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-2">2. 新建连接</h2>
|
||||
<ol>
|
||||
<li>
|
||||
<p>打开应用,进入<strong>连接选择器</strong>,选择数据库类型(如 MySQL);</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>或者直接粘贴连接 URL,点「填入」自动拆解字段:</p>
|
||||
<pre><code>mysql://root:pass@127.0.0.1:3306/shop
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>点 <strong>测试</strong> 验证连通性,再点 <strong>保存并连接</strong>。</p>
|
||||
</li>
|
||||
</ol>
|
||||
<p>连接配置保存在本机,密码混淆存储;后续查询只携带会话 ID,不再上送账密。</p>
|
||||
<h2 id="sec-3">3. 第一次查询</h2>
|
||||
<ol>
|
||||
<li>
|
||||
<p>左侧对象树展开库,<strong>点表名</strong>直接查看前 100 行(展开表可看列结构);</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>打开 SQL 编辑器,输入:</p>
|
||||
<pre><code class="language-sql">SELECT * FROM orders ORDER BY id DESC LIMIT 100;
|
||||
</code></pre>
|
||||
</li>
|
||||
<li>
|
||||
<p>按 <strong>⌘/Ctrl + Enter</strong> 执行当前语句(或选中的片段);</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>结果面板支持<strong>复制 / 导出 CSV / 生成 INSERT</strong>,双击单元格即复制。</p>
|
||||
</li>
|
||||
</ol>
|
||||
<h2 id="sec-4">4. 验证服务</h2>
|
||||
<pre><code class="language-bash">curl -s http://127.0.0.1:8788/health
|
||||
# {"ok":true,"service":"opsxdb"}
|
||||
</code></pre>
|
||||
<h2 id="sec-5">5. 手边没有数据库?</h2>
|
||||
<p>本地还没有可连的库?用仓库自带的辅助脚本一键起一个(需要 Docker,一次只起一个):</p>
|
||||
<pre><code class="language-bash">./tests/dbctl.sh up a # MySQL
|
||||
./tests/dbctl.sh up c # PostgreSQL(用户 opsx)
|
||||
./tests/dbctl.sh up f # Redis
|
||||
</code></pre>
|
||||
<p>各驱动的验收状态见《驱动支持》。</p>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/intro"><span class="pn-label">← 上一页</span><span class="pn-title">产品介绍</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/interface"><span class="pn-label">下一页 →</span><span class="pn-title">界面导览</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">1. 启动</a>
|
||||
<a class="toc-l2" href="#sec-2">2. 新建连接</a>
|
||||
<a class="toc-l2" href="#sec-3">3. 第一次查询</a>
|
||||
<a class="toc-l2" href="#sec-4">4. 验证服务</a>
|
||||
<a class="toc-l2" href="#sec-5">5. 手边没有数据库?</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+269
@@ -0,0 +1,269 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Redis 工作台 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> SQL 工作台 <span>/</span> Redis 工作台</div>
|
||||
<h1 class="page-title">Redis 工作台</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>Redis 连接使用专用表单(redis)。连上后,对象树是键空间浏览器,编辑器是 Redis 命令行 —— <strong>和 SQL 共用同一套输入框</strong>,不另开 CLI 页。</p>
|
||||
<h2 id="sec-1">为什么命令行不单独做一套</h2>
|
||||
<p>SQL 工作台已经有:多 Tab、⌘/Ctrl+Enter、查询历史、书签、危险确认、取消。Redis 命令同样是「输入 → 执行 → 结果表」。</p>
|
||||
<p>拆成独立 CLI(终端 REPL)会让快捷键、历史、危险确认分叉,也和 Navicat 式多引擎工作台不一致。</p>
|
||||
<p>因此:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th></th>
|
||||
<th>SQL</th>
|
||||
<th>Redis</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>输入框</td>
|
||||
<td>同一 CodeMirror</td>
|
||||
<td>同一 CodeMirror(占位/补全换成命令)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>切分</td>
|
||||
<td>分号语句</td>
|
||||
<td><strong>按行</strong>(<code>SET k "a;b"</code> 不会被分号拆开)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>执行</td>
|
||||
<td>⌘/Ctrl+Enter 当前语句或选区</td>
|
||||
<td>⌘/Ctrl+Enter 当前行或选区</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>结果</td>
|
||||
<td>结果表</td>
|
||||
<td>命令结果表;从对象树打开键则进入键详情</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>Another Redis Desktop Manager 的独立 CLI Tab、opsxsql 的单行命令 + 输出日志,列为后续 P1,不是现在的主路径。</p>
|
||||
<h2 id="sec-2">键空间浏览</h2>
|
||||
<p>对象树对 Redis 显示 DB0–15(Cluster 仅 0)。展开库后:</p>
|
||||
<ul>
|
||||
<li><strong>SCAN 过滤</strong>:输入 <code>user:*</code> 点「应用」;生产大库请带前缀,避免扫全库。最多展示 500 个键,超出提示截断。</li>
|
||||
<li><strong>按分隔符编文件夹</strong>:连接表单的「键分隔符」默认 <code>:</code>,<code>CEX:FOLLOW:FOLLOWERS:1</code> 显示为 <code>CEX / FOLLOW / FOLLOWERS / 1</code>。文件夹显示数量;右键可「只看此前缀」「在此新建键」。</li>
|
||||
<li><strong>类型色点</strong>:string 绿 / hash 蓝 / list 橙 / set 紫 / zset 青。</li>
|
||||
<li><strong>点键</strong>:打开键详情(不是假 SELECT)。</li>
|
||||
</ul>
|
||||
<h2 id="sec-3">键详情</h2>
|
||||
<p>对标 Another Redis Desktop Manager 的 Hash/List/Set 视图:</p>
|
||||
<ul>
|
||||
<li>类型徽章、键名(回车重命名)、TTL(回车或「保存 TTL」,<code>-1</code> 永久)、刷新、导出还原命令、删除;</li>
|
||||
<li><strong>结构</strong>表:Hash 为 ID / Field / Value,JSON 值自动美化;可新增字段、编辑、删除;</li>
|
||||
<li><strong>JSON</strong> 视图:整体格式化;</li>
|
||||
<li>表内关键字过滤。</li>
|
||||
</ul>
|
||||
<p>String 可直接改值保存。</p>
|
||||
<h2 id="sec-4">命令执行</h2>
|
||||
<p>编辑器直接写 Redis 命令:</p>
|
||||
<pre><code class="language-bash">PING
|
||||
SET demo:key "hello" EX 60
|
||||
GET demo:key
|
||||
HGETALL demo:hash
|
||||
SCAN 0 MATCH demo:* COUNT 100
|
||||
INFO memory
|
||||
</code></pre>
|
||||
<ul>
|
||||
<li>未点名的命令走通用 <code>Do</code>(<code>EXISTS</code> / <code>ECHO</code> / <code>INFO</code> / <code>CLIENT LIST</code> 等不必再加白名单);</li>
|
||||
<li><code>FLUSHALL</code> / <code>FLUSHDB</code> / <code>KEYS</code> / <code>CONFIG</code> 仍要二段确认;</li>
|
||||
<li><code>KEYS *</code> 在大库上会阻塞 —— 请用 <code>SCAN MATCH</code>。</li>
|
||||
</ul>
|
||||
<h3 id="sec-5">切换逻辑库(SELECT)</h3>
|
||||
<p><code>SELECT 1</code> 是 Redis 官方的切库命令,编辑器直接支持 —— 语义与 redis-cli 一致:<strong>切换后本 Tab 的后续命令都在目标库执行</strong>:</p>
|
||||
<pre><code class="language-bash">SELECT 1
|
||||
GET db1:only:key # 在 db1 执行
|
||||
</code></pre>
|
||||
<ul>
|
||||
<li>没有也没有 <code>USE</code>(那是 SQL 语法)—— 输入 <code>USE db1</code> 会得到 Redis 原生报错<br>
|
||||
<code>ERR unknown command 'USE'</code>,与 redis-cli 行为一致;</li>
|
||||
<li>切库只影响当前查询 Tab(多 Tab 可各连各的库),左侧对象树点开对应库可浏览键;</li>
|
||||
<li>Cluster 模式只有 DB 0,<code>SELECT</code> 无效。</li>
|
||||
</ul>
|
||||
<h2 id="sec-6">连接参数</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>字段</th>
|
||||
<th>说明</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>host / port</td>
|
||||
<td>单机默认 127.0.0.1:6379</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>password / user</td>
|
||||
<td>ACL / requirepass</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>database</td>
|
||||
<td>逻辑库序号(0–15 常见;Cluster 忽略)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>键分隔符</td>
|
||||
<td>对象树文件夹分隔,默认 <code>:</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>ssl</td>
|
||||
<td>TLS</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>redisMode</td>
|
||||
<td><code>standalone</code>(默认)/ <code>sentinel</code> / <code>cluster</code></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>redisNodes</td>
|
||||
<td>Sentinel / Cluster 节点列表,<code>host:port</code> 多行或逗号分隔</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>masterName</td>
|
||||
<td>Sentinel 主节点名(必填)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>sentinelPassword</td>
|
||||
<td>Sentinel 密码(可空)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h3 id="sec-7">Sentinel</h3>
|
||||
<p>模式选「哨兵」,填写至少一个 Sentinel 地址和 <code>masterName</code>(如 <code>mymaster</code>)。逻辑库序号仍可用。</p>
|
||||
<h3 id="sec-8">Cluster</h3>
|
||||
<p>模式选「集群」,填写至少一个种子节点。Cluster 不支持 <code>SELECT</code> 多库,对象树只暴露 DB 0。槽位路由由客户端处理,键浏览走 <code>SCAN</code>。</p>
|
||||
<blockquote>
|
||||
<p><strong>环境</strong>:Sentinel / Cluster 表单与后端已接好;真实拓扑联调见 <code>docs/BACKLOG.md</code> 环境缺口。</p>
|
||||
</blockquote>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/results"><span class="pn-label">← 上一页</span><span class="pn-title">结果与导出</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/security"><span class="pn-label">下一页 →</span><span class="pn-title">安全设计</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">为什么命令行不单独做一套</a>
|
||||
<a class="toc-l2" href="#sec-2">键空间浏览</a>
|
||||
<a class="toc-l2" href="#sec-3">键详情</a>
|
||||
<a class="toc-l2" href="#sec-4">命令执行</a>
|
||||
<a class="toc-l3" href="#sec-5">切换逻辑库(SELECT)</a>
|
||||
<a class="toc-l2" href="#sec-6">连接参数</a>
|
||||
<a class="toc-l3" href="#sec-7">Sentinel</a>
|
||||
<a class="toc-l3" href="#sec-8">Cluster</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
+184
@@ -0,0 +1,184 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>结果与导出 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> SQL 工作台 <span>/</span> 结果与导出</div>
|
||||
<h1 class="page-title">结果与导出</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>查询跑完只是开始,把结果带走才算完成 —— OpsxDB 给了三条最快路径。</p>
|
||||
<h2 id="sec-1">三种取数方式</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>方式</th>
|
||||
<th>用途</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><strong>复制</strong></td>
|
||||
<td>直接进剪贴板,贴到群聊 / 文档 / 表格</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>CSV</strong></td>
|
||||
<td>导出标准 CSV 文件,Excel / Numbers 直接打开</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><strong>INSERT</strong></td>
|
||||
<td>把结果行生成为 INSERT 语句,直接可在别的库回放</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-2">表数据工作台(关系库)</h2>
|
||||
<p>从对象树打开表后,结果区按 DBeaver / DBX 的数据编辑器组织,而不是只有一张裸网格:</p>
|
||||
<ul>
|
||||
<li><strong>工具栏</strong>:刷新、增行、删行、提交(有主键才写回);</li>
|
||||
<li><strong>条件过滤</strong>:列 + 运算符(= ≠ > < 包含 空…)+ 值,可加多条 AND;应用后重查,SQL 回填编辑器;</li>
|
||||
<li><strong>本页搜索</strong>:不打库,只过滤当前结果;</li>
|
||||
<li><strong>列头</strong>:列名 + 类型色 + 主键标记,悬停看注释。</li>
|
||||
</ul>
|
||||
<h2 id="sec-3">表结构</h2>
|
||||
<p>「结构」分页签:列 / 索引 / 外键 / 触发器 / DDL。MySQL 族、PostgreSQL 族、SQLite、SQL Server、Oracle 都拉元数据;DDL 可复制或插入编辑器。</p>
|
||||
<h2 id="sec-4">单元格操作</h2>
|
||||
<ul>
|
||||
<li><strong>双击单元格</strong>:进入编辑(有主键时写回);长文本可展开;</li>
|
||||
<li>列头点击排序(仅当前页)。</li>
|
||||
</ul>
|
||||
<h2 id="sec-5">截断提示</h2>
|
||||
<p>为保护界面与内存,超大结果集会按阈值截断展示:</p>
|
||||
<ul>
|
||||
<li>结果面板顶部显示「已截断」提示与实际行数;</li>
|
||||
<li>需要完整数据时,缩小查询范围(加 LIMIT / WHERE)或使用导出。</li>
|
||||
</ul>
|
||||
<blockquote>
|
||||
<p><strong>提示</strong>:默认「点表名看前 100 行」就是截断策略的一部分 —— 快速浏览用 100 行,精确取数写 WHERE。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-6">与 AI 面板联动</h2>
|
||||
<p>写不出来的查询可以直接在 AI 面板用自然语言描述(「查最近 7 天下单但未支付的用户」),生成 SQL 后放回编辑器执行,见《AI 助手》。</p>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/workbench"><span class="pn-label">← 上一页</span><span class="pn-title">SQL 工作台</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/redis"><span class="pn-label">下一页 →</span><span class="pn-title">Redis 工作台</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">三种取数方式</a>
|
||||
<a class="toc-l2" href="#sec-2">表数据工作台(关系库)</a>
|
||||
<a class="toc-l2" href="#sec-3">表结构</a>
|
||||
<a class="toc-l2" href="#sec-4">单元格操作</a>
|
||||
<a class="toc-l2" href="#sec-5">截断提示</a>
|
||||
<a class="toc-l2" href="#sec-6">与 AI 面板联动</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
[{"Slug":"intro","Title":"产品介绍","Group":"开始使用","Text":"OpsxDB 是一款 本地优先 的桌面数据库工作台,面向运维与开发:连库、写 SQL、看结果,全在本机完成。 主交付形态是可安装的桌面应用(Tauri 2),本地 Go 后端随应用自动启动;同一套界面也可用单个二进制在 Web / 内网部署。数据全部保存在本机,不经过任何第三方服务器。 功能总览 能力 说明 18 种数据库 关系型 / NoSQL / 时序·搜索 / 国产库,全部端到端验收;常用引擎原生内置 连接选择器 搜索 / 分类 / 最近 / 图标网格;粘贴连接 URL 一键填入表单;连接颜色标记区分环境 SQL 工作台 CodeMirror 编辑器、⌘/Ctrl+Enter 执行语句或选区、多 Tab、可拖分栏、格式化、执行历史 对象树 懒加载库 / 表 / 列 / 索引 / 触发器;点表名直接看前 100 行;右键管理对象 结果处理 单元格编辑回写 / 右键复制(值·行·JSON·INSERT)/ CSV·JSON·INSERT 导出 / 过滤构建器 / 分页 Redis 工作台 单机 / Sentinel / Cluster;键树浏览(SCAN 游标)、TTL、Hash/JSON 编辑、危险命令拦截 安全通道 每连接独立配置 SSL/TLS 与 SSH 隧道;后端本机监听 + 访问令牌 AI 助手 生成 / 解释 / 优化 / 修复 / 方言转换 / 样例;OpenAI 兼容协议 + SSE 流式输出 危险操作防护 DROP / TRUNCATE / 无 WHERE 的 UPDATE·DELETE 执行前确认 桌面唯一形态 桌面 GUI(Tauri 2),本地后端随应用自动拉起 支持的数据库 家族 覆盖 关系型 MySQL · MariaDB · TiDB · PostgreSQL · SQL Server · Oracle · SQLite NoSQL Redis · MongoDB 时序 / 搜索 Elasticsearch · ZooKeeper · InfluxDB 国产库 达梦 DM · OceanBase · GaussDB / openGauss · PolarDB · TDSQL · Kingbase 逐引擎的接入方式、默认端口与能力边界见《 》;全部 18 引擎均已实测验收。 为什么选 OpsxDB 数据主权 :连接配置与查询历史只存在本机;后端默认仅监听 127.0.0.1。 开箱即用 :桌面版双击即用,本地后端随应用自动拉起;官网与文档也由它内置提供。 为快设计 :点表即看数据、⌘Enter 即执行、结果三键取走(复制 / CSV / INSERT)。 轻量克制 :一个 Go 二进制 + 一份前端,内网可部署,无遥测无账号。 提示 :想马上动手?直接看下一章《快速开始》,30 秒连上第一个库。"},{"Slug":"quickstart","Title":"快速开始","Group":"开始使用","Text":"本章从零到出结果:起服务 → 建连接 → 执行第一条 SQL。 1. 启动 桌面版(主交付形态)双击 OpsxDB 应用即可,本地后端随应用自动拉起。 从源码运行(开发): 注意 :客户端只在桌面 App 里运行。 起的 是桌面 devUrl 的资产服务,不是浏览器客户端;浏览器只用于官网 与文档 (后端 直接提供)。 2. 新建连接 1. 打开应用,进入 连接选择器 ,选择数据库类型(如 MySQL); 2. 或者直接粘贴连接 URL,点「填入」自动拆解字段: 3. 点 测试 验证连通性,再点 保存并连接 。 连接配置保存在本机,密码混淆存储;后续查询只携带会话 ID,不再上送账密。 3. 第一次查询 1. 左侧对象树展开库, 点表名 直接查看前 100 行(展开表可看列结构); 2. 打开 SQL 编辑器,输入: 3. 按 ⌘/Ctrl + Enter 执行当前语句(或选中的片段); 4. 结果面板支持 复制 / 导出 CSV / 生成 INSERT ,双击单元格即复制。 4. 验证服务 5. 手边没有数据库? 本地还没有可连的库?用仓库自带的辅助脚本一键起一个(需要 Docker,一次只起一个): 各驱动的验收状态见《驱动支持》。"},{"Slug":"interface","Title":"界面导览","Group":"开始使用","Text":"OpsxDB 的界面为「高频操作」设计:从打开应用到看到数据,路径越短越好。 连接选择器 启动后的第一个界面: 搜索 :按名称快速过滤已保存的连接; 分类 :关系型 / NoSQL / 国产库 / 时序·搜索 分组浏览; 最近 :最近使用的连接排在最前; 图标网格 :按数据库类型直选,未就绪的类型会标注「未就绪」(仅可保存配置); URL 填入 :粘贴 点「填入」,字段自动拆解。 工作台布局 连接成功后进入工作台,三栏结构: 区域 内容 左侧 连接列表 + 对象树(库 → 表 → 列,懒加载) 中部 SQL 编辑器(多 Tab)+ 结果面板,可拖动分栏 右侧 AI 面板(生成 / 解释 / 优化 / 修复 / 方言 / 样例) 对象树 点 表名 :直接打开前 100 行数据; 展开 表 :查看列结构; 右键表 :打开表 / 查看 DDL / 生成 SQL(SELECT·INSERT·UPDATE·DELETE)/ 重命名 / 克隆表结构·克隆表(含数据)/ 清空 / 截断 / 删除 —— 危险项红色并二次确认; 右键库 :新建查询 / 新建表Line truncated
|
||||
+179
@@ -0,0 +1,179 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>安全设计 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link active" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 安全与 AI <span>/</span> 安全设计</div>
|
||||
<h1 class="page-title">安全设计</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>连生产库的工具,安全必须是默认项。OpsxDB 的安全设计围绕一句话:<strong>数据不出你的机器。</strong></p>
|
||||
<h2 id="sec-1">本地优先</h2>
|
||||
<ul>
|
||||
<li>连接配置、查询历史、主题偏好全部保存在本机;</li>
|
||||
<li>无账号体系、无遥测、无云端同步;</li>
|
||||
<li>后端默认只监听 <code>127.0.0.1</code>,对外服务需要显式配置(<code>OPSXDB_BIND_PUBLIC=1</code> 或 <code>OPSXDB_ADDR</code>)。</li>
|
||||
</ul>
|
||||
<h2 id="sec-2">凭据保护</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>层面</th>
|
||||
<th>机制</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>存储</td>
|
||||
<td>连接密码在本机混淆存储,不落明文</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>传输</td>
|
||||
<td>连接建立后,后续查询只携带 <code>sessionId</code>,账密不再每次上送</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>会话</td>
|
||||
<td>会话在服务端维护,可主动关闭(连接断开即失效)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-3">加密通道</h2>
|
||||
<p><strong>SSL / TLS</strong>:每个连接可独立开启;数据库支持 TLS 即可启用(MySQL、PostgreSQL、SQL Server、Redis、MongoDB 均支持)。</p>
|
||||
<p><strong>SSH 隧道</strong>:数据库在跳板机后时,配置 SSH 字段组,OpsxDB 先建隧道再转发数据库连接 —— 库端口不必暴露公网。</p>
|
||||
<h2 id="sec-4">危险操作防护</h2>
|
||||
<ul>
|
||||
<li>DROP / TRUNCATE 执行前确认;</li>
|
||||
<li>无 WHERE 的 UPDATE / DELETE 执行前确认;</li>
|
||||
<li>结果集按阈值截断,避免误操作拖垮界面。</li>
|
||||
</ul>
|
||||
<h2 id="sec-5">内网部署形态</h2>
|
||||
<p>单二进制 + 内置静态页(官网 / 文档 / 工作台),无外部依赖:</p>
|
||||
<ul>
|
||||
<li>任意内网主机可部署;</li>
|
||||
<li>无外联请求,可在纯内网环境运行;</li>
|
||||
<li>升级即替换一个二进制。</li>
|
||||
</ul>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/redis"><span class="pn-label">← 上一页</span><span class="pn-title">Redis 工作台</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/ai"><span class="pn-label">下一页 →</span><span class="pn-title">AI 助手</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">本地优先</a>
|
||||
<a class="toc-l2" href="#sec-2">凭据保护</a>
|
||||
<a class="toc-l2" href="#sec-3">加密通道</a>
|
||||
<a class="toc-l2" href="#sec-4">危险操作防护</a>
|
||||
<a class="toc-l2" href="#sec-5">内网部署形态</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
+273
@@ -0,0 +1,273 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>快捷键 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link active" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> 参考 <span>/</span> 快捷键</div>
|
||||
<h1 class="page-title">快捷键</h1>
|
||||
<div class="page-meta">更新于 2026-09-23</div>
|
||||
<article class="md">
|
||||
<p>快捷键是 OpsxDB 的第一等操作方式 —— 高频动作全部可以不碰鼠标完成。</p>
|
||||
<blockquote>
|
||||
<p>Windows / Linux 上 <code>⌘</code> 对应 <code>Ctrl</code>。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-1">全局与工作台</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>快捷键</th>
|
||||
<th>动作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>⌘ Enter</code></td>
|
||||
<td>执行当前语句或选区(自动按语句切分)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ P</code></td>
|
||||
<td>快速跳转:模糊搜索库 / 表,Enter 直达数据</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ T</code></td>
|
||||
<td>新建查询 Tab</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ W</code></td>
|
||||
<td>关闭当前查询(有未保存改动会确认)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ 1–9</code></td>
|
||||
<td>切到第 N 个查询</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Ctrl Tab</code></td>
|
||||
<td>循环切换查询</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Alt ↑ / ↓</code></td>
|
||||
<td>上一条 / 下一条语句(编辑器内)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ ⇧ F</code></td>
|
||||
<td>聚焦对象树过滤框</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>F5</code></td>
|
||||
<td>刷新对象树</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ B</code></td>
|
||||
<td>显示 / 隐藏 AI 面板</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ /</code></td>
|
||||
<td>快捷键帮助</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-2">结果网格</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>快捷键 / 操作</th>
|
||||
<th>动作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td><code>↑</code> <code>↓</code></td>
|
||||
<td>上下移动选中行</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>PgUp</code> <code>PgDn</code></td>
|
||||
<td>翻页移动</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Home</code> <code>End</code></td>
|
||||
<td>跳到首行 / 末行</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>双击单元格 / <code>Enter</code></td>
|
||||
<td>进入单元格编辑</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Delete</code> <code>Backspace</code></td>
|
||||
<td>清空选中格(进入编辑)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>⌘ Z</code>(编辑中)</td>
|
||||
<td>撤销本格改动,恢复进入编辑前的值</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Esc</code></td>
|
||||
<td>取消编辑 / 关闭弹层与菜单</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>Ctrl/⌘ + C</code></td>
|
||||
<td>复制选中单元格值(无列选中时复制整行 TSV)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>右键单元格</td>
|
||||
<td>编辑 / 复制单元格值 / 复制行(TSV · JSON · INSERT)/ 查看全文</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>多格复制粘贴</td>
|
||||
<td>与 Excel 互通:复制区域后直接粘贴进网格批量暂存</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>双击分栏分隔条</td>
|
||||
<td>结果区最大化 / 还原</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-3">对象树</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>操作</th>
|
||||
<th>动作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>双击表名</td>
|
||||
<td>打开表工作台(看前 100 行)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>右键库</td>
|
||||
<td>新建查询 / 浏览对象 / 复制 / 设为默认库 / 刷新 / 删除库</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>右键表 / 视图</td>
|
||||
<td>查看数据 / 查看 DDL / 复制 / 清空截断 / 删除表</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><code>↑</code> <code>↓</code> <code>→</code> <code>←</code> <code>Enter</code></td>
|
||||
<td>键盘导航(展开 / 收起 / 进入)</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="sec-4">SQL 编辑器右键</h2>
|
||||
<p>编辑器内右键可完成:执行选中语句、执行当前语句、查看数据、查看 DDL、剪切 / 复制 / 粘贴 / 全选 —— 系统默认菜单被替换,不再跳出「Look Up / 检查元素」。</p>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/faq"><span class="pn-label">← 上一页</span><span class="pn-title">常见问题</span></a>
|
||||
|
||||
<span class="pn"></span>
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">全局与工作台</a>
|
||||
<a class="toc-l2" href="#sec-2">结果网格</a>
|
||||
<a class="toc-l2" href="#sec-3">对象树</a>
|
||||
<a class="toc-l2" href="#sec-4">SQL 编辑器右键</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
+208
@@ -0,0 +1,208 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>SQL 工作台 · OpsxDB 文档</title>
|
||||
<meta name="description" content="OpsxDB 桌面数据库工作台用户文档 — 连库、写 SQL、看结果;MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,SSH 隧道与 SSL 加密。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/docs/assets/docs.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-menu" viewBox="0 0 24 24"><path d="M4 5h16"/><path d="M4 12h16"/><path d="M4 19h16"/></symbol>
|
||||
<symbol id="i-printer" viewBox="0 0 24 24"><path d="M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2"/><path d="M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6"/><rect x="6" y="14" width="12" height="8" rx="1"/></symbol>
|
||||
<symbol id="i-thumbs-up" viewBox="0 0 24 24"><path d="M15 5.88 14 10h5.83a2 2 0 0 1 1.92 2.56l-2.33 8A2 2 0 0 1 17.5 22H4a2 2 0 0 1-2-2v-8a2 2 0 0 1 2-2h2.76a2 2 0 0 0 1.79-1.11L12 2a3.13 3.13 0 0 1 3 3.88Z"/><path d="M7 10v12"/></symbol>
|
||||
<symbol id="i-thumbs-down" viewBox="0 0 24 24"><path d="M9 18.12 10 14H4.17a2 2 0 0 1-1.92-2.56l2.33-8A2 2 0 0 1 6.5 2H20a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-2.76a2 2 0 0 0-1.79 1.11L12 22a3.13 3.13 0 0 1-3-3.88Z"/><path d="M17 14V2"/></symbol>
|
||||
</svg>
|
||||
<header class="topbar">
|
||||
<div class="topbar-inner">
|
||||
<button class="menu-btn" id="menu-btn" aria-label="打开导航"><svg class="i"><use href="#i-menu"/></svg></button>
|
||||
<a class="brand" href="/docs">
|
||||
<span class="brand-logo"><svg width="28" height="28" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-docs" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-docs)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB <em>文档</em></span>
|
||||
</a>
|
||||
<span class="ver-badge">v0.1</span>
|
||||
<div class="search">
|
||||
<input id="search-input" type="search" placeholder="搜索文档…" autocomplete="off" spellcheck="false">
|
||||
<div class="search-panel" id="search-panel" hidden></div>
|
||||
</div>
|
||||
<nav class="top-links">
|
||||
<a href="/home">官网</a>
|
||||
<a href="/docs/quickstart">快速开始</a>
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<div class="layout" id="layout">
|
||||
<aside class="sidebar" id="sidebar">
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">开始使用</div>
|
||||
|
||||
<a class="nav-link" href="/docs/intro">产品介绍</a>
|
||||
|
||||
<a class="nav-link" href="/docs/quickstart">快速开始</a>
|
||||
|
||||
<a class="nav-link" href="/docs/interface">界面导览</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">连接与驱动</div>
|
||||
|
||||
<a class="nav-link" href="/docs/connect">新建连接</a>
|
||||
|
||||
<a class="nav-link" href="/docs/drivers">驱动支持</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">SQL 工作台</div>
|
||||
|
||||
<a class="nav-link active" href="/docs/workbench">SQL 工作台</a>
|
||||
|
||||
<a class="nav-link" href="/docs/results">结果与导出</a>
|
||||
|
||||
<a class="nav-link" href="/docs/redis">Redis 工作台</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">安全与 AI</div>
|
||||
|
||||
<a class="nav-link" href="/docs/security">安全设计</a>
|
||||
|
||||
<a class="nav-link" href="/docs/ai">AI 助手</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="nav-group">
|
||||
<div class="nav-group-title">参考</div>
|
||||
|
||||
<a class="nav-link" href="/docs/faq">常见问题</a>
|
||||
|
||||
<a class="nav-link" href="/docs/shortcuts">快捷键</a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="sidebar-foot">© 2026 OpsxDB · 本地优先的数据库工作台</div>
|
||||
</aside>
|
||||
|
||||
<main class="content">
|
||||
<div class="breadcrumb">文档 <span>/</span> SQL 工作台 <span>/</span> SQL 工作台</div>
|
||||
<h1 class="page-title">SQL 工作台</h1>
|
||||
<div class="page-meta">更新于 2026-09-20</div>
|
||||
<article class="md">
|
||||
<p>SQL 工作台是日常使用率最高的界面,所有交互围绕「快」设计。</p>
|
||||
<h2 id="sec-1">执行模型</h2>
|
||||
<ul>
|
||||
<li><strong>⌘/Ctrl + Enter</strong>:执行光标所在的<strong>当前语句</strong>;有选区时执行<strong>选区</strong>;</li>
|
||||
<li>不是「整页脚本」模式 —— 多条语句互不干扰,想跑哪句把光标放哪;</li>
|
||||
<li>Redis 连接共用同一编辑器,按<strong>行</strong>执行命令(见 <a href="redis">Redis 工作台</a>),不另开 CLI;</li>
|
||||
<li>执行在会话上运行,连接断开后自动提示。</li>
|
||||
</ul>
|
||||
<h2 id="sec-2">多 Tab 与分栏</h2>
|
||||
<ul>
|
||||
<li>每个查询一个 Tab,并行执行互不阻塞;</li>
|
||||
<li>编辑器 / 结果区可拖动分栏,长查询时编辑器不被结果挤占;</li>
|
||||
<li>Tab 与布局持久化,重开应用保持原样。</li>
|
||||
</ul>
|
||||
<h2 id="sec-3">对象树联动</h2>
|
||||
<ul>
|
||||
<li>左侧对象树懒加载库 / 表 / 列;</li>
|
||||
<li><strong>点表名 = 打开表工作台</strong>(前 100 行 + 条件过滤 + 结构分页),并回填 SELECT;</li>
|
||||
<li>展开表看列名与类型,写 SQL 时可对照。</li>
|
||||
</ul>
|
||||
<h2 id="sec-4">查询历史</h2>
|
||||
<ul>
|
||||
<li>本地留存最近 200 条(不上传、不同步);</li>
|
||||
<li><strong>相同语句自动去重置顶</strong> —— 历史即「最近用过的不同语句」,高频查询永远在第一条;</li>
|
||||
<li>点击条目回填编辑器;悬停出现 <strong>▶</strong> 按钮,回填并直接重跑;</li>
|
||||
<li>顶部过滤框支持按语句内容或连接名搜索;</li>
|
||||
<li>条目显示时间、连接名、行数与耗时;失败的语句红色标出。</li>
|
||||
</ul>
|
||||
<h2 id="sec-5">危险 SQL 防护</h2>
|
||||
<p>执行以下语句前会弹确认框:</p>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>类型</th>
|
||||
<th>规则</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>删除对象</td>
|
||||
<td>DROP / TRUNCATE</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>全表更新</td>
|
||||
<td>无 WHERE 的 UPDATE / DELETE</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<blockquote>
|
||||
<p><strong>注意</strong>:确认框只拦「明确危险」的模式,不替代事务与备份习惯;生产库操作请配合审批流程。</p>
|
||||
</blockquote>
|
||||
<h2 id="sec-6">快捷键</h2>
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th>快捷键</th>
|
||||
<th>动作</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>⌘/Ctrl + Enter</td>
|
||||
<td>执行当前语句 / 选区</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>双击结果单元格</td>
|
||||
<td>复制单元格内容</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Esc</td>
|
||||
<td>关闭弹层 / 取消确认</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</article>
|
||||
|
||||
<div class="pn-nav">
|
||||
|
||||
<a class="pn prev" href="/docs/drivers"><span class="pn-label">← 上一页</span><span class="pn-title">驱动支持</span></a>
|
||||
|
||||
|
||||
<a class="pn next" href="/docs/results"><span class="pn-label">下一页 →</span><span class="pn-title">结果与导出</span></a>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="feedback" id="feedback">
|
||||
<span class="feedback-q">本页内容是否对您有帮助?</span>
|
||||
<button class="fb-btn" data-v="yes"><svg class="i"><use href="#i-thumbs-up"/></svg> 有帮助</button>
|
||||
<button class="fb-btn" data-v="no"><svg class="i"><use href="#i-thumbs-down"/></svg> 没有帮助</button>
|
||||
<span class="fb-thanks" id="fb-thanks" hidden>感谢您的反馈!</span>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<aside class="toc">
|
||||
<div class="toc-title">本页目录</div>
|
||||
<nav class="toc-nav">
|
||||
<a class="toc-l2" href="#sec-1">执行模型</a>
|
||||
<a class="toc-l2" href="#sec-2">多 Tab 与分栏</a>
|
||||
<a class="toc-l2" href="#sec-3">对象树联动</a>
|
||||
<a class="toc-l2" href="#sec-4">查询历史</a>
|
||||
<a class="toc-l2" href="#sec-5">危险 SQL 防护</a>
|
||||
<a class="toc-l2" href="#sec-6">快捷键</a>
|
||||
|
||||
</nav>
|
||||
<button class="print-btn" id="print-btn"><svg class="i"><use href="#i-printer"/></svg> 打印 / 导出 PDF</button>
|
||||
</aside>
|
||||
</div>
|
||||
|
||||
<script src="/docs/assets/docs.js" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+300
@@ -0,0 +1,300 @@
|
||||
<!doctype html>
|
||||
<html lang="zh-CN">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>OpsxDB — 本地优先的桌面数据库工作台</title>
|
||||
<meta name="description" content="OpsxDB:连库、写 SQL、看结果,全在本机完成。MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 一个窗口管完,SSH 隧道与 SSL 加密,AI 辅助写 SQL。">
|
||||
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2064%2064%22%3E%3Cdefs%3E%3ClinearGradient%20id%3D%22g%22%20x1%3D%220%22%20y1%3D%220%22%20x2%3D%2264%22%20y2%3D%2264%22%20gradientUnits%3D%22userSpaceOnUse%22%3E%3Cstop%20offset%3D%220%22%20stop-color%3D%22%23059669%22%2F%3E%3Cstop%20offset%3D%221%22%20stop-color%3D%2206B6D4%22%2F%3E%3C%2FlinearGradient%3E%3C%2Fdefs%3E%3Crect%20width%3D%2264%22%20height%3D%2264%22%20rx%3D%2214%22%20fill%3D%22url(%23g)%22%2F%3E%3Cg%20stroke%3D%22%23fff%22%20stroke-width%3D%224.5%22%20fill%3D%22none%22%20stroke-linecap%3D%22round%22%3E%3Cellipse%20cx%3D%2232%22%20cy%3D%2220%22%20rx%3D%2215%22%20ry%3D%226.5%22%2F%3E%3Cpath%20d%3D%22M17%2020v24c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5V20%22%2F%3E%3Cpath%20d%3D%22M17%2032c0%203.6%206.7%206.5%2015%206.5s15-2.9%2015-6.5%22%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E">
|
||||
<link rel="stylesheet" href="/site/assets/site.css">
|
||||
</head>
|
||||
<body>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" style="display:none" aria-hidden="true">
|
||||
<symbol id="i-database" viewBox="0 0 24 24"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M3 5v14a9 3 0 0 0 18 0V5"/><path d="M3 12a9 3 0 0 0 18 0"/></symbol>
|
||||
<symbol id="i-shield-check" viewBox="0 0 24 24"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"/><path d="m9 12 2 2 4-4"/></symbol>
|
||||
<symbol id="i-terminal" viewBox="0 0 24 24"><polyline points="4 17 10 11 4 5"/><line x1="12" x2="20" y1="19" y2="19"/></symbol>
|
||||
<symbol id="i-table" viewBox="0 0 24 24"><rect width="18" height="18" x="3" y="3" rx="2"/><path d="M3 9h18"/><path d="M3 15h18"/><path d="M9 3v18"/><path d="M15 3v18"/></symbol>
|
||||
<symbol id="i-tree" viewBox="0 0 24 24"><path d="M13 10h7a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"/><path d="M13 21h7a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z"/><path d="M3 5a2 2 0 0 0 2 2h3"/><path d="M3 3v13a2 2 0 0 0 2 2h3"/></symbol>
|
||||
<symbol id="i-zap" viewBox="0 0 24 24"><path d="M15.914 4a1.5 1.5 0 00-2.474-1.561l-9 9A1.5 1.5 0 005.5 14h4.002a.5.5 0 01.471.666L8.086 20a1.5 1.5 0 002.475 1.56l9-9A1.5 1.5 0 0018.5 10h-3.997a.5.5 0 01-.472-.667z"/></symbol>
|
||||
<symbol id="i-sparkles" viewBox="0 0 24 24"><path d="M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z"/><path d="M20 3v4"/><path d="M22 5h-4"/></symbol>
|
||||
<symbol id="i-key" viewBox="0 0 24 24"><circle cx="7.5" cy="15.5" r="5.5"/><path d="m21 2-9.6 9.6"/><path d="m15.5 7.5 3 3L22 7l-3-3"/></symbol>
|
||||
<symbol id="i-monitor" viewBox="0 0 24 24"><rect width="20" height="14" x="2" y="3" rx="2"/><line x1="8" x2="16" y1="21" y2="21"/><line x1="12" x2="12" y1="17" y2="21"/></symbol>
|
||||
<symbol id="i-server" viewBox="0 0 24 24"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"/><rect width="20" height="8" x="2" y="14" rx="2" ry="2"/><line x1="6" x2="6.01" y1="6" y2="6"/><line x1="6" x2="6.01" y1="18" y2="18"/></symbol>
|
||||
<symbol id="i-clock" viewBox="0 0 24 24"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></symbol>
|
||||
<symbol id="i-clipboard" viewBox="0 0 24 24"><rect width="8" height="4" x="8" y="2" rx="1" ry="1"/><path d="M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2"/></symbol>
|
||||
</svg>
|
||||
|
||||
<!-- ===================== 导航 ===================== -->
|
||||
<header class="nav">
|
||||
<div class="nav-inner">
|
||||
<a class="brand" href="/home">
|
||||
<span class="brand-logo"><svg width="30" height="30" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-site" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-site)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span>
|
||||
<span class="brand-name">OpsxDB</span>
|
||||
</a>
|
||||
<nav class="nav-links">
|
||||
<a href="#features">功能</a>
|
||||
<a href="#drivers">驱动</a>
|
||||
<a href="#security">安全</a>
|
||||
<a href="#download">下载</a>
|
||||
<a href="/docs" target="_blank" rel="noopener">文档</a>
|
||||
</nav>
|
||||
<div class="nav-cta">
|
||||
<a class="btn btn-primary" href="/docs/quickstart" target="_blank" rel="noopener">快速开始 →</a>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<!-- ===================== Hero ===================== -->
|
||||
<section class="hero">
|
||||
<div class="hero-inner">
|
||||
<div class="hero-copy">
|
||||
<div class="hero-badge"><svg class="i"><use href="#i-sparkles"/></svg> v0.1 · 桌面 GUI · 数据 100% 本机</div>
|
||||
<h1>一个窗口,<br>管好<em>全公司的数据库</em></h1>
|
||||
<p class="hero-sub">
|
||||
连库、写 SQL、看结果,全在本机完成。<br>
|
||||
MySQL / PostgreSQL / SQL Server / Oracle / SQLite / Redis 内置驱动,TiDB · OceanBase · GaussDB · 人大金仓同协议直连,
|
||||
SSH 隧道与 SSL 加密直达内网库,AI 帮你把 SQL 写得又快又稳。
|
||||
</p>
|
||||
<div class="hero-actions">
|
||||
<a class="btn btn-primary btn-lg" href="#download">下载桌面版</a>
|
||||
<a class="btn btn-ghost btn-lg" href="/docs/quickstart" target="_blank" rel="noopener">30 秒连上第一个库 →</a>
|
||||
</div>
|
||||
<div class="hero-pills">
|
||||
<span>本地优先</span><span>SSH 隧道</span><span>SSL 加密</span><span>国产库兼容</span><span>AI / MCP</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 工作台示意(纯 CSS 绘制) -->
|
||||
<div class="mock" aria-hidden="true">
|
||||
<div class="mock-titlebar"><i></i><i></i><i></i><span>OpsxDB · prod-mysql</span></div>
|
||||
<div class="mock-body">
|
||||
<div class="mock-side">
|
||||
<div class="mock-search"></div>
|
||||
<div class="mock-item conn"><i class="dot on"></i>prod-mysql</div>
|
||||
<div class="mock-item conn"><i class="dot on"></i>pg-analytics</div>
|
||||
<div class="mock-item conn"><i class="dot"></i>sqlite-demo</div>
|
||||
<div class="mock-group">shop(库)</div>
|
||||
<div class="mock-item active"><svg class="mi"><use href="#i-table"/></svg> orders</div>
|
||||
<div class="mock-item"><svg class="mi"><use href="#i-table"/></svg> users</div>
|
||||
<div class="mock-item"><svg class="mi"><use href="#i-table"/></svg> products</div>
|
||||
</div>
|
||||
<div class="mock-main">
|
||||
<div class="mock-tabs"><span class="tab on">orders · 前 100 行</span><span class="tab">query-2</span></div>
|
||||
<div class="mock-sql">
|
||||
<pre><span class="kw">SELECT</span> id, user_id, amount, status
|
||||
<span class="kw">FROM</span> orders
|
||||
<span class="kw">WHERE</span> created_at > <span class="str">'2026-09-01'</span>
|
||||
<span class="kw">ORDER BY</span> id <span class="kw">DESC</span> <span class="kw">LIMIT</span> <span class="num">100</span>;</pre>
|
||||
</div>
|
||||
<div class="mock-grid">
|
||||
<span class="gh">id</span><span class="gh">user_id</span><span class="gh">amount</span><span class="gh">status</span>
|
||||
<span>9f2a</span><span>u_1024</span><span>¥ 1,299.00</span><span class="ok">PAID</span>
|
||||
<span>9f29</span><span>u_0987</span><span>¥ 89.00</span><span class="ok">PAID</span>
|
||||
<span>9f28</span><span>u_2333</span><span>¥ 459.00</span><span class="warn">PENDING</span>
|
||||
<span>9f27</span><span>u_1024</span><span>¥ 3,280.00</span><span class="ok">PAID</span>
|
||||
</div>
|
||||
<div class="mock-status"><span class="ok">✓ 100 行 · 38ms</span><span>MySQL 8 · 127.0.0.1:3306</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 数据统计条 -->
|
||||
<div class="stats">
|
||||
<div class="stats-inner">
|
||||
<div class="stat"><b>7</b><span>内置驱动</span></div>
|
||||
<div class="stat"><b>18</b><span>可连数据库</span></div>
|
||||
<div class="stat"><b>0</b><span>数据外发</span></div>
|
||||
<div class="stat"><b>1</b><span>个二进制内置官网与文档</span></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== 为什么选 ===================== -->
|
||||
<section class="section">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">为什么运维和开发选 OpsxDB</h2>
|
||||
<p class="sec-sub">不把生产库连到别人的云上 —— 这是我们做这款工具的出发点。</p>
|
||||
<div class="grid g4">
|
||||
<div class="card">
|
||||
<div class="card-icon"><svg class="i-lg"><use href="#i-shield-check"/></svg></div>
|
||||
<h3>本地优先,数据主权</h3>
|
||||
<p>连接配置、查询历史全部保存在本机,服务只监听 127.0.0.1,不经过任何第三方服务器。</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-icon"><svg class="i-lg"><use href="#i-database"/></svg></div>
|
||||
<h3>六类库一个窗口</h3>
|
||||
<p>MySQL 族 / PostgreSQL 族 / SQL Server / Oracle / SQLite / Redis 统一工作台,切换零负担。</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-icon"><svg class="i-lg"><use href="#i-key"/></svg></div>
|
||||
<h3>安全通道直达内网</h3>
|
||||
<p>每个连接可独立配置 SSL/TLS 与 SSH 隧道,跳板机后面的库也能安全直连。</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card-icon"><svg class="i-lg"><use href="#i-sparkles"/></svg></div>
|
||||
<h3>AI 写 SQL,也能查库</h3>
|
||||
<p>Ask 生成/解释/优化;Agent 用与 MCP 同源的只读工具真查库。Cursor 可 <code>npx @rlwj-lab/opsxdb-mcp</code> 接入。</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== 功能 ===================== -->
|
||||
<section class="section alt" id="features">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">开箱即用的专业能力</h2>
|
||||
<p class="sec-sub">为「每天都要碰库的人」设计的工作台密度。</p>
|
||||
<div class="grid g3">
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-terminal"/></svg></div><div><h3>连接选择器</h3><p>搜索 / 分类 / 最近 / 图标网格;粘贴 <code>mysql://user:pass@host:3306/db</code> 一键填入表单。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-zap"/></svg></div><div><h3>SQL 工作台</h3><p>CodeMirror 编辑器,⌘/Ctrl+Enter 执行当前语句或选区,多 Tab 并行,可拖分栏。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-table"/></svg></div><div><h3>结果随手取</h3><p>结果集一键复制 / 导出 CSV / 生成 INSERT;双击单元格即复制,截断行数有提示。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-tree"/></svg></div><div><h3>对象树与表数据</h3><p>懒加载库 / 表 / 列;点表名直接看前 100 行,展开表即看列结构。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-database"/></svg></div><div><h3>Redis 工作台</h3><p>编辑器直接执行 <code>PING</code> / <code>GET</code> / <code>SET</code> / <code>KEYS</code>,键空间浏览、TTL 管理。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-sparkles"/></svg></div><div><h3>AI / MCP</h3><p>Ask 写 SQL;Agent 真查白名单库。可用 <code>npx @rlwj-lab/opsxdb-mcp</code> 接到 Cursor(默认只读)。</p></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== 驱动矩阵 ===================== -->
|
||||
<section class="section" id="drivers">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">数据库支持</h2>
|
||||
<p class="sec-sub">常用库 native Go 驱动编译内置;长尾库规划 agent 按需接入。</p>
|
||||
<div class="grid g3">
|
||||
<div class="proto"><h3><svg class="i"><use href="#i-database"/></svg> MySQL 族</h3><p>MySQL · MariaDB · TiDB · OceanBase · PolarDB · TDSQL<span class="port">:3306</span></p></div>
|
||||
<div class="proto"><h3><svg class="i"><use href="#i-database"/></svg> PostgreSQL 族</h3><p>PostgreSQL · GaussDB / openGauss · 人大金仓<span class="port">:5432</span></p></div>
|
||||
<div class="proto"><h3><svg class="i"><use href="#i-database"/></svg> SQL Server</h3><p>原生协议直连,SSL 可选<span class="port">:1433</span></p></div>
|
||||
<div class="proto"><h3><svg class="i"><use href="#i-database"/></svg> Oracle</h3><p>纯 Go 驱动 go-ora,不引入 JVM<span class="port">:1521</span></p></div>
|
||||
<div class="proto"><h3><svg class="i"><use href="#i-database"/></svg> SQLite</h3><p>本地文件库,填路径即连<span class="port">file</span></p></div>
|
||||
<div class="proto"><h3><svg class="i"><use href="#i-zap"/></svg> Redis</h3><p>连接即可执行命令与键管理<span class="port">:6379</span></p></div>
|
||||
</div>
|
||||
<div class="badges">
|
||||
<span class="more">规划中 · agent 按需接入:达梦 DM8 · MongoDB · ZooKeeper · Elasticsearch · InfluxDB</span>
|
||||
</div>
|
||||
<p class="footnote">驱动验收状态(本机 docker 实测)见 <a href="/docs/drivers" target="_blank" rel="noopener">文档 · 驱动支持</a>。</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== 安全 ===================== -->
|
||||
<section class="section alt" id="security">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">安全是默认项,不是选项</h2>
|
||||
<p class="sec-sub">连生产库的工具,必须先过安全这一关。</p>
|
||||
<div class="grid g3">
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-key"/></svg></div><div><h3>密码不出本机</h3><p>连接密码本机混淆存储;查询只带 <code>sessionId</code>,账密不再每次上送。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-shield-check"/></svg></div><div><h3>SSL / TLS 每库可配</h3><p>按连接独立开启 TLS,证书校验策略随库配置。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-server"/></svg></div><div><h3>SSH 隧道</h3><p>跳板机场景一条隧道直达内网库,无需暴露公网端口。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-monitor"/></svg></div><div><h3>仅监听回环</h3><p>后端默认绑定 127.0.0.1,对外服务需显式开启。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-clipboard"/></svg></div><div><h3>危险 SQL 确认</h3><p>DROP / TRUNCATE / 无 WHERE 的 UPDATE·DELETE 执行前二次确认。</p></div></div>
|
||||
<div class="card row"><div class="card-icon"><svg class="i-lg"><use href="#i-clock"/></svg></div><div><h3>查询历史本地留存</h3><p>历史只存在本机,随时回跳重跑,不上传不同步。</p></div></div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== 下载 / 形态 ===================== -->
|
||||
<section class="section" id="download">
|
||||
<div class="wrap">
|
||||
<h2 class="sec-title">三种形态,同一套体验</h2>
|
||||
<p class="sec-sub">客户端唯一形态是桌面 GUI;官网与文档内置在同一个 Go 二进制里。</p>
|
||||
<div class="pricing three">
|
||||
<div class="price-card featured">
|
||||
<div class="plan-tag">推荐 · 主交付</div>
|
||||
<div class="plan">桌面版</div>
|
||||
<div class="price"><b>Tauri 2</b></div>
|
||||
<div class="plan-sub">macOS(Apple Silicon / Intel)· Windows 规划中</div>
|
||||
<ul>
|
||||
<li>✓ 双击启动,本地后端随应用自动拉起</li>
|
||||
<li>✓ DMG 安装包内置 sidecar,无需手动起服务</li>
|
||||
<li>✓ 连接 / 查询 / 结果全功能</li>
|
||||
<li>✓ 数据 100% 留在本机</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="/docs/quickstart" target="_blank" rel="noopener">从源码构建</a>
|
||||
</div>
|
||||
<div class="price-card">
|
||||
<div class="plan">官网 + 文档</div>
|
||||
<div class="price"><b>内置</b></div>
|
||||
<div class="plan-sub">随二进制提供,无需部署</div>
|
||||
<ul>
|
||||
<li>✓ 官网 <code>/</code> 与文档 <code>/docs</code> 内置于后端</li>
|
||||
<li>✓ 文档支持全文搜索 / 打印 / 导出 PDF</li>
|
||||
<li>✓ 浏览器只看站点与文档,不承载客户端</li>
|
||||
<li>✓ 随版本发布自动更新</li>
|
||||
</ul>
|
||||
<a class="btn btn-primary" href="/docs" target="_blank" rel="noopener">浏览文档</a>
|
||||
</div>
|
||||
<div class="price-card enterprise">
|
||||
<div class="plan-tag dark">内网部署</div>
|
||||
<div class="plan">企业内网版</div>
|
||||
<div class="price"><b>无外联</b></div>
|
||||
<div class="plan-sub">数据不出企业网</div>
|
||||
<ul>
|
||||
<li>✓ 单二进制 + 静态页,内网任意主机部署</li>
|
||||
<li>✓ 默认仅回环监听,对外需显式配置</li>
|
||||
<li>✓ SSH 隧道 / TLS 直达内网数据库</li>
|
||||
<li>✓ 无遥测、无账号、无云依赖</li>
|
||||
</ul>
|
||||
<a class="btn btn-dark" href="/docs/security" target="_blank" rel="noopener">安全设计</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== FAQ ===================== -->
|
||||
<section class="section alt" id="faq">
|
||||
<div class="wrap narrow">
|
||||
<h2 class="sec-title">常见问题</h2>
|
||||
<div class="faq">
|
||||
<details open><summary>我的连接密码保存在哪?安全吗?</summary><p>全部保存在本机(混淆存储),查询时只携带会话 ID,密码不会随每次请求上送,也不会同步到任何云端。</p></details>
|
||||
<details><summary>能在浏览器里操作数据库吗?</summary><p>不能。客户端唯一形态是桌面应用(Tauri 2);浏览器只承载官网与文档,由后端 :8788 内置提供。开发时的 :5174 只是桌面 devUrl 的资产服务。</p></details>
|
||||
<details><summary>和 DBeaver / Navicat 有什么差别?</summary><p>OpsxDB 面向运维与开发的日常高频操作(连库、点表、写 SQL、取结果),界面密度和快捷键为「快」设计;本地优先、后端随桌面应用拉起、内置中文文档。重度管理功能(ER 图、数据比对等)在路线图中。</p></details>
|
||||
<details><summary>Oracle 支持好了吗?</summary><p>驱动代码已就绪(纯 Go 的 go-ora,无需 JVM),但本机 docker 验收在 Apple Silicon 上受镜像限制未通过,需 x86 环境或真库完成验收,详见文档《驱动支持》。</p></details>
|
||||
<details><summary>AI 功能需要联网吗?</summary><p>配置云端模型(如 DeepSeek)时,提问与结构上下文会发往该服务;可改用本地兼容端点。MCP / Agent 查库始终在本机执行,默认只读。</p></details>
|
||||
<details><summary>支持达梦 / MongoDB 吗?</summary><p>已列入路线:常用库 native 内置,长尾库(达梦、MongoDB、ZooKeeper、ES、InfluxDB)规划 agent 按需接入,驱动分发走独立仓库并校验 sha256。</p></details>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== CTA ===================== -->
|
||||
<section class="cta">
|
||||
<div class="wrap">
|
||||
<h2>把数据库客户端收回自己手里</h2>
|
||||
<p>30 秒连上第一个库;官网与文档都由你手里的这个二进制提供。</p>
|
||||
<div class="hero-actions center">
|
||||
<a class="btn btn-inverse btn-lg" href="/docs/quickstart" target="_blank" rel="noopener">快速开始 ↗</a>
|
||||
<a class="btn btn-outline btn-lg" href="/docs" target="_blank" rel="noopener">阅读文档</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- ===================== Footer ===================== -->
|
||||
<footer class="footer">
|
||||
<div class="wrap footer-grid">
|
||||
<div>
|
||||
<div class="brand"><span class="brand-logo"><svg width="30" height="30" viewBox="0 0 64 64" aria-label="OpsxDB"><defs><linearGradient id="lg-foot" x1="0" y1="0" x2="64" y2="64" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#059669"/><stop offset="1" stop-color="#06B6D4"/></linearGradient></defs><rect width="64" height="64" rx="14" fill="url(#lg-foot)"/><g stroke="#fff" stroke-width="4.5" fill="none" stroke-linecap="round"><ellipse cx="32" cy="20" rx="15" ry="6.5"/><path d="M17 20v24c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5V20"/><path d="M17 32c0 3.6 6.7 6.5 15 6.5s15-2.9 15-6.5"/></g></svg></span><span class="brand-name">OpsxDB</span></div>
|
||||
<p class="footer-desc">本地优先的桌面数据库工作台。<br>数据在自己手里,才是真的效率工具。</p>
|
||||
</div>
|
||||
<div>
|
||||
<h4>产品</h4>
|
||||
<a href="#features">功能特性</a>
|
||||
<a href="#drivers">数据库支持</a>
|
||||
<a href="#download">下载与形态</a>
|
||||
</div>
|
||||
<div>
|
||||
<h4>资源</h4>
|
||||
<a href="/docs" target="_blank" rel="noopener">用户文档</a>
|
||||
<a href="/docs/drivers" target="_blank" rel="noopener">驱动验收状态</a>
|
||||
<a href="/docs/faq" target="_blank" rel="noopener">常见问题</a>
|
||||
</div>
|
||||
<div>
|
||||
<h4>安全</h4>
|
||||
<a href="#security">安全设计</a>
|
||||
<a href="/docs/security" target="_blank" rel="noopener">SSL 与 SSH 隧道</a>
|
||||
<a href="/docs/quickstart" target="_blank" rel="noopener">快速开始</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="footer-bar">© 2026 OpsxDB · 本页由单二进制内置提供(/ · /home)</div>
|
||||
</footer>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Vendored
+268
@@ -0,0 +1,268 @@
|
||||
/* OpsxDB 官网 —— 营销单页样式(祖母绿 → 青家族色) */
|
||||
:root {
|
||||
--green: #059669;
|
||||
--green-dark: #047857;
|
||||
--green-soft: rgba(5, 150, 105, 0.08);
|
||||
--cyan: #06b6d4;
|
||||
--bg: #ffffff;
|
||||
--bg-alt: #f5faf8;
|
||||
--border: #e2ebe7;
|
||||
--text: #101828;
|
||||
--text-2: #52606d;
|
||||
--text-3: #98a2b3;
|
||||
--red: #dc2626;
|
||||
--amber: #d97706;
|
||||
--radius: 14px;
|
||||
--shadow: 0 1px 3px rgba(6, 23, 18, .06), 0 12px 32px rgba(6, 23, 18, .08);
|
||||
--mono: "JetBrains Mono", SFMono-Regular, Menlo, monospace;
|
||||
}
|
||||
* { box-sizing: border-box; scroll-behavior: smooth; }
|
||||
body {
|
||||
margin: 0; font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Microsoft YaHei", "Segoe UI", sans-serif;
|
||||
color: var(--text); background: var(--bg); font-size: 15px; line-height: 1.75;
|
||||
}
|
||||
a { color: var(--green-dark); text-decoration: none; }
|
||||
h1,h2,h3 { letter-spacing: -0.015em; }
|
||||
section[id] { scroll-margin-top: 76px; }
|
||||
.wrap { max-width: 1120px; margin: 0 auto; padding: 0 24px; }
|
||||
.wrap.narrow { max-width: 820px; }
|
||||
/* ---------- SVG 图标 ---------- */
|
||||
.i { width: 15px; height: 15px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; vertical-align: -2px; }
|
||||
.i-lg { width: 28px; height: 28px; vertical-align: middle; }
|
||||
code { font-family: var(--mono); font-size: 13px; background: var(--green-soft); color: var(--green-dark); border-radius: 5px; padding: 1px 6px; }
|
||||
|
||||
/* ---------- 按钮 ---------- */
|
||||
.btn {
|
||||
display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
||||
border-radius: 10px; padding: 9px 20px; font-size: 14.5px; font-weight: 600; cursor: pointer;
|
||||
transition: all .18s; border: 1px solid transparent; white-space: nowrap;
|
||||
}
|
||||
.btn-lg { padding: 12px 26px; font-size: 15.5px; }
|
||||
.btn-primary { background: var(--green); color: #fff !important; box-shadow: 0 6px 18px rgba(5,150,105,.30); }
|
||||
.btn-primary:hover { background: var(--green-dark); transform: translateY(-1px); }
|
||||
.btn-ghost { border-color: var(--border); color: var(--text) !important; background: #fff; }
|
||||
.btn-ghost:hover { border-color: var(--green); color: var(--green-dark) !important; }
|
||||
.btn-inverse { background: #fff; color: var(--green-dark) !important; }
|
||||
.btn-inverse:hover { transform: translateY(-1px); }
|
||||
.btn-outline { border-color: rgba(255,255,255,.5); color: #fff !important; }
|
||||
.btn-outline:hover { border-color: #fff; background: rgba(255,255,255,.1); }
|
||||
|
||||
/* ---------- 导航 ---------- */
|
||||
.nav {
|
||||
position: sticky; top: 0; z-index: 50; background: rgba(255,255,255,.9);
|
||||
backdrop-filter: blur(10px); border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.nav-inner { max-width: 1120px; margin: 0 auto; padding: 0 24px; height: 60px; display: flex; align-items: center; gap: 28px; }
|
||||
.brand { display: flex; align-items: center; gap: 9px; }
|
||||
.brand-logo { display: inline-flex; }
|
||||
.brand-logo svg { display: block; border-radius: 8px; }
|
||||
.brand-name { font-size: 17px; font-weight: 800; color: var(--text) !important; }
|
||||
.nav-links { display: flex; gap: 22px; }
|
||||
.nav-links a { font-size: 14px; font-weight: 500; color: var(--text-2) !important; }
|
||||
.nav-links a:hover { color: var(--green-dark) !important; }
|
||||
.nav-cta { margin-left: auto; }
|
||||
|
||||
/* ---------- Hero ---------- */
|
||||
.hero {
|
||||
position: relative; overflow: hidden;
|
||||
background:
|
||||
radial-gradient(1200px 500px at 85% -10%, rgba(5,150,105,.13), transparent 60%),
|
||||
radial-gradient(800px 400px at -10% 10%, rgba(6,182,212,.09), transparent 55%),
|
||||
linear-gradient(180deg, #f5fbf8 0%, #fff 100%);
|
||||
border-bottom: 1px solid var(--border);
|
||||
}
|
||||
.hero-inner {
|
||||
max-width: 1120px; margin: 0 auto; padding: 72px 24px 56px;
|
||||
display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 6fr); gap: 48px; align-items: center;
|
||||
}
|
||||
.hero-badge {
|
||||
display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; font-weight: 600; color: var(--green-dark);
|
||||
background: #fff; border: 1px solid rgba(5,150,105,.25); border-radius: 999px; padding: 4px 14px;
|
||||
box-shadow: 0 2px 8px rgba(5,150,105,.1); margin-bottom: 18px;
|
||||
}
|
||||
.hero h1 { font-size: 44px; line-height: 1.22; font-weight: 800; margin: 0 0 16px; }
|
||||
.hero h1 em { font-style: normal; color: var(--green); }
|
||||
.hero-sub { color: var(--text-2); font-size: 16px; margin: 0 0 26px; }
|
||||
.hero-actions { display: flex; gap: 14px; flex-wrap: wrap; }
|
||||
.hero-actions.center { justify-content: center; }
|
||||
.hero-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 22px; }
|
||||
.hero-pills span {
|
||||
font-size: 12px; color: var(--text-2); background: #fff; border: 1px solid var(--border);
|
||||
padding: 3px 12px; border-radius: 999px;
|
||||
}
|
||||
|
||||
/* ---------- 工作台 Mock(纯 CSS) ---------- */
|
||||
.mock {
|
||||
border-radius: 14px; overflow: hidden; box-shadow: var(--shadow); border: 1px solid #1b2b26;
|
||||
background: #0c1512; transform: perspective(1400px) rotateY(-4deg) rotateX(1.5deg);
|
||||
}
|
||||
.mock-titlebar {
|
||||
display: flex; align-items: center; gap: 7px; height: 34px; padding: 0 12px;
|
||||
background: #0f1a16; border-bottom: 1px solid #1b2b26;
|
||||
}
|
||||
.mock-titlebar i { width: 11px; height: 11px; border-radius: 50%; background: #37504a; }
|
||||
.mock-titlebar i:nth-child(1) { background: #f87171; } .mock-titlebar i:nth-child(2) { background: #fbbf24; } .mock-titlebar i:nth-child(3) { background: #34d399; }
|
||||
.mock-titlebar span { margin-left: 8px; color: #8aa39b; font-size: 11px; }
|
||||
.mock-body { display: grid; grid-template-columns: 158px minmax(0,1fr); min-height: 330px; }
|
||||
.mock-side { border-right: 1px solid #1b2b26; padding: 10px 8px; background: #0b1310; }
|
||||
.mock-search { height: 22px; border-radius: 6px; background: #142019; margin-bottom: 10px; }
|
||||
.mock-group { color: #8aa39b; font-size: 11px; padding: 8px 6px 3px; }
|
||||
.mock-item { display: flex; align-items: center; gap: 6px; color: #a9c0b8; font-size: 11.5px; padding: 4px 6px; border-radius: 6px; }
|
||||
.mock-item.active { background: rgba(5,150,105,.18); color: #6ee7b7; }
|
||||
.mock-item.conn .dot { width: 7px; height: 7px; border-radius: 50%; background: #47564f; flex-shrink: 0; }
|
||||
.mock-item.conn .dot.on { background: #34d399; }
|
||||
.mi { width: 11px; height: 11px; stroke: currentColor; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; opacity: .8; }
|
||||
.mock-main { padding: 10px 12px; display: flex; flex-direction: column; gap: 9px; }
|
||||
.mock-tabs { display: flex; gap: 4px; }
|
||||
.mock-tabs .tab { color: #5f7a70; font-size: 10.5px; padding: 4px 10px; border-radius: 6px 6px 0 0; }
|
||||
.mock-tabs .tab.on { color: #6ee7b7; background: rgba(5,150,105,.12); border-bottom: 2px solid var(--green); }
|
||||
.mock-sql { border: 1px solid #1b2b26; border-radius: 9px; padding: 10px 12px; background: #0b1310; }
|
||||
.mock-sql pre {
|
||||
margin: 0; font-family: var(--mono); font-size: 11px; line-height: 1.7; color: #c3d4cd; white-space: pre-wrap;
|
||||
}
|
||||
.mock-sql .kw { color: #6ee7b7; }
|
||||
.mock-sql .str { color: #fcd34d; }
|
||||
.mock-sql .num { color: #7dd3fc; }
|
||||
.mock-grid {
|
||||
display: grid; grid-template-columns: 52px 62px 1fr 68px; gap: 0 10px;
|
||||
border: 1px solid #1b2b26; border-radius: 9px; padding: 8px 10px; background: #0b1310;
|
||||
font-family: var(--mono); font-size: 10.5px; line-height: 1.9; color: #b7c8c1;
|
||||
}
|
||||
.mock-grid .gh { color: #7fe3c3; border-bottom: 1px solid #1b2b26; margin-bottom: 3px; font-weight: 600; }
|
||||
.mock-grid .ok { color: #34d399; }
|
||||
.mock-grid .warn { color: #fbbf24; }
|
||||
.mock-status { display: flex; justify-content: space-between; color: #5f7a70; font-size: 10px; font-family: var(--mono); padding: 0 2px; }
|
||||
.mock-status .ok { color: #34d399; }
|
||||
|
||||
/* ---------- 数据统计条 ---------- */
|
||||
.stats { border-top: 1px solid var(--border); background: rgba(255,255,255,.7); }
|
||||
.stats-inner {
|
||||
max-width: 1120px; margin: 0 auto; padding: 18px 24px;
|
||||
display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px; text-align: center;
|
||||
}
|
||||
.stat b { display: block; font-size: 26px; font-weight: 800; color: var(--green-dark); line-height: 1.2; }
|
||||
.stat span { font-size: 12.5px; color: var(--text-2); }
|
||||
|
||||
/* ---------- 通用 Section ---------- */
|
||||
.section { padding: 72px 0; }
|
||||
.section.alt { background: var(--bg-alt); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }
|
||||
.sec-title { font-size: 30px; font-weight: 800; text-align: center; margin: 0 0 8px; }
|
||||
.sec-sub { text-align: center; color: var(--text-2); margin: 0 0 40px; }
|
||||
.grid { display: grid; gap: 18px; }
|
||||
.g3 { grid-template-columns: repeat(3, minmax(0,1fr)); }
|
||||
.g4 { grid-template-columns: repeat(4, minmax(0,1fr)); }
|
||||
|
||||
/* ---------- 卡片 ---------- */
|
||||
.card {
|
||||
background: #fff; border: 1px solid var(--border); border-radius: var(--radius);
|
||||
padding: 22px; box-shadow: 0 1px 2px rgba(6,23,18,.04); transition: all .18s;
|
||||
}
|
||||
.card:hover { transform: translateY(-3px); box-shadow: var(--shadow); border-color: rgba(5,150,105,.35); }
|
||||
.card h3 { font-size: 16px; margin: 0 0 6px; }
|
||||
.card p { color: var(--text-2); font-size: 13.5px; margin: 0; }
|
||||
.card-icon { color: var(--green); margin-bottom: 10px; }
|
||||
.card-icon .i-lg { width: 30px; height: 30px; }
|
||||
.card.row { display: flex; gap: 14px; align-items: flex-start; }
|
||||
.card.row .card-icon { margin: 2px 0 0; }
|
||||
|
||||
/* ---------- 驱动矩阵 ---------- */
|
||||
.proto {
|
||||
background: #fff; border: 1px solid var(--border); border-left: 3px solid var(--green);
|
||||
border-radius: 12px; padding: 18px 20px;
|
||||
}
|
||||
.proto h3 { margin: 0 0 6px; font-size: 15.5px; display: flex; align-items: center; gap: 8px; }
|
||||
.proto h3 .i { color: var(--green); width: 17px; height: 17px; }
|
||||
.proto p { margin: 0; color: var(--text-2); font-size: 13.5px; }
|
||||
.proto .port { margin-left: 10px; font-family: var(--mono); font-size: 11.5px; color: var(--green-dark); background: var(--green-soft); border-radius: 5px; padding: 1px 8px; white-space: nowrap; }
|
||||
|
||||
/* ---------- 徽章 / 脚注 ---------- */
|
||||
.badges { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-bottom: 18px; }
|
||||
.badges span {
|
||||
background: #fff; border: 1px solid var(--border); border-radius: 999px;
|
||||
padding: 6px 16px; font-size: 13px; font-weight: 500; color: var(--text);
|
||||
}
|
||||
.badges span.more { border-style: dashed; color: var(--text-2); }
|
||||
.footnote { text-align: center; color: var(--text-3); font-size: 12.5px; margin: 10px 0 0; }
|
||||
|
||||
/* ---------- 形态卡(下载) ---------- */
|
||||
.pricing.three { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 22px; max-width: 1080px; margin: 0 auto; }
|
||||
.price-card {
|
||||
position: relative; background: #fff; border: 1px solid var(--border); border-radius: 16px;
|
||||
padding: 30px 28px 26px; box-shadow: 0 1px 2px rgba(6,23,18,.04); display: flex; flex-direction: column;
|
||||
}
|
||||
.price-card.featured { border: 2px solid var(--green); box-shadow: 0 12px 36px rgba(5,150,105,.16); }
|
||||
.price-card.enterprise {
|
||||
background: linear-gradient(160deg, #0f1f1a 0%, #0c1512 70%);
|
||||
border: 1px solid #22453a; box-shadow: 0 14px 40px rgba(12,21,18,.4);
|
||||
}
|
||||
.price-card.enterprise .plan { color: #8aa39b; }
|
||||
.price-card.enterprise .price b { color: #fff; font-size: 34px; }
|
||||
.price-card.enterprise .price span { color: #8aa39b; }
|
||||
.price-card.enterprise .plan-sub { color: #8aa39b; }
|
||||
.price-card.enterprise li { color: #a9c0b8; border-bottom-color: #1b2b26; }
|
||||
.btn-dark { background: #fff; color: #0c1512 !important; }
|
||||
.btn-dark:hover { transform: translateY(-1px); background: #e6f7f0; }
|
||||
.plan-tag {
|
||||
position: absolute; top: -13px; left: 50%; transform: translateX(-50%);
|
||||
background: var(--green); color: #fff; font-size: 12px; font-weight: 700;
|
||||
padding: 3px 14px; border-radius: 999px; white-space: nowrap;
|
||||
}
|
||||
.plan-tag.dark { background: #0c1512; border: 1px solid #22453a; }
|
||||
.plan { font-size: 16px; font-weight: 700; color: var(--text-2); }
|
||||
.price { margin: 8px 0 2px; }
|
||||
.price b { font-size: 40px; font-weight: 800; letter-spacing: -.02em; color: var(--text); }
|
||||
.price span { color: var(--text-3); font-size: 14px; margin-left: 4px; }
|
||||
.plan-sub { color: var(--text-3); font-size: 13px; margin-bottom: 18px; }
|
||||
.price-card ul { list-style: none; padding: 0; margin: 0 0 22px; flex: 1; }
|
||||
.price-card li { font-size: 13.5px; color: var(--text-2); padding: 6px 0; border-bottom: 1px dashed var(--border); }
|
||||
.price-card li:last-child { border-bottom: none; }
|
||||
.price-card li code { font-size: 12px; }
|
||||
.price-card .btn { width: 100%; }
|
||||
|
||||
/* ---------- FAQ ---------- */
|
||||
.faq details {
|
||||
background: #fff; border: 1px solid var(--border); border-radius: 12px;
|
||||
padding: 16px 20px; margin-bottom: 12px;
|
||||
}
|
||||
.faq summary { font-weight: 600; cursor: pointer; font-size: 15px; list-style: none; display: flex; justify-content: space-between; }
|
||||
.faq summary::after { content: "+"; color: var(--text-3); font-weight: 400; }
|
||||
.faq details[open] summary::after { content: "-"; }
|
||||
.faq details p { margin: 10px 0 0; color: var(--text-2); font-size: 14px; }
|
||||
|
||||
/* ---------- CTA ---------- */
|
||||
.cta {
|
||||
background: linear-gradient(135deg, #047857 0%, #059669 55%, #0d9488 100%);
|
||||
color: #fff; text-align: center; padding: 72px 24px;
|
||||
}
|
||||
.cta h2 { font-size: 32px; font-weight: 800; margin: 0 0 10px; }
|
||||
.cta p { color: rgba(255,255,255,.85); margin: 0 0 28px; }
|
||||
|
||||
/* ---------- Footer ---------- */
|
||||
.footer { background: #0c1512; color: #8aa39b; padding: 52px 0 0; font-size: 13.5px; }
|
||||
.footer-grid { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr; gap: 32px; padding-bottom: 36px; }
|
||||
.footer .brand-name { color: #fff !important; }
|
||||
.footer .brand { display: flex; align-items: center; gap: 9px; }
|
||||
.footer-desc { margin: 12px 0 0; font-size: 13px; line-height: 1.8; }
|
||||
.footer h4 { color: #fff; font-size: 13.5px; margin: 4px 0 12px; }
|
||||
.footer a { display: block; color: #8aa39b !important; padding: 4px 0; font-size: 13px; }
|
||||
.footer a:hover { color: #fff !important; }
|
||||
.footer-bar { border-top: 1px solid #1b2b26; text-align: center; padding: 18px; font-size: 12px; color: #5f7a70; }
|
||||
|
||||
/* ---------- 响应式 ---------- */
|
||||
@media (max-width: 1020px) {
|
||||
.hero-inner { grid-template-columns: 1fr; padding-top: 52px; }
|
||||
.mock { transform: none; }
|
||||
.g4 { grid-template-columns: repeat(2, minmax(0,1fr)); }
|
||||
.g3 { grid-template-columns: repeat(2, minmax(0,1fr)); }
|
||||
.pricing.three { grid-template-columns: minmax(0, 420px); }
|
||||
.footer-grid { grid-template-columns: repeat(2, 1fr); }
|
||||
.stats-inner { grid-template-columns: repeat(2, 1fr); }
|
||||
}
|
||||
@media (max-width: 680px) {
|
||||
.nav-links { display: none; }
|
||||
.hero h1 { font-size: 32px; }
|
||||
.sec-title { font-size: 24px; }
|
||||
.g3, .g4 { grid-template-columns: 1fr; }
|
||||
.footer-grid { grid-template-columns: 1fr; }
|
||||
.stats-inner { grid-template-columns: repeat(2, 1fr); }
|
||||
}
|
||||
Reference in new issue
Block a user