Convex 自托管数据清理完全指南:用空快照导入安全重置数据库
数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载数据清除Clearing Data是自托管 Convex 部署运维中最常被问到的问题之一如何在不销毁 Docker 卷、不重新部署的前提下把数据库里的数据清零本文基于 convex-backend 仓库中 self-hosted/advanced/clearing_data.md 的官方指引结合 CLI 与后端源码系统讲解自托管 Convex 的清库机制——为什么没有一键 reset 命令、如何备份、如何按表/全量/按组件清除数据以及底层快照导入引擎是如何保证这一过程原子且可恢复的。读完本文你将能安全、可复现地完成自托管部署的数据重置并理解每一步背后的实现原理。为什么 Convex 不提供一键重置数据库原文档明确指出Convex 刻意不提供单一破坏性的 reset database 命令。这是一个深思熟虑的设计决策而非功能缺失。原因在于一条reset命令太容易被误执行且往往伴随着删库重来式的不可控副作用例如需要重建 Docker 卷、重新初始化存储、重新部署代码。Convex 采用的替代方案是用一次空快照导入来替换表的数据。这样做有三个关键收益不清除 Docker 卷不需要停止容器、删除卷或重新 provision 部署保留 schema 与函数清的是表里的文档数据表结构schema和你在convex/下编写的查询、变更、action 等函数全部原样保留复用成熟的数据导入通道清除操作与日常的npx convex import走同一条经过充分验证的快照导入链路行为可预期、可审计。从源码看这条链路在 CLI 侧由 npm-packages/convex/src/cli/lib/convexImport.ts 的importIntoDeployment驱动在后端由 crates/application/src/snapshot_import/mod.rs 的导入执行器完成。后文会展开讲这一机制的细节。备份与前置检查不可跳过清除数据是不可逆操作动手之前请完成以下两步第一步先备份原文档要求在执行任何清除操作前先导出备份npx convex export --path backup.zipexport命令会把当前部署的数据打包成 ZIP内部格式为每个表一个目录内含documents.jsonl见下文--format zip的说明。备份文件应存放在安全位置并确认其非空、可重新导入。第二步确认目标部署所有清除命令都作用于CONVEX_SELF_HOSTED_URL所指向的部署。在运行全表清除之前务必确认该环境变量指向你真正想要清空的部署echo $CONVEX_SELF_HOSTED_URL这一点至关重要同一条一行式命令如果误对生产部署执行会摧毁它的全部数据。原文档对此给出了明确的警告。对于自托管部署CONVEX_SELF_HOSTED_URL与CONVEX_SELF_HOSTED_ADMIN_KEY通常一起配置参见 self-hosted/README.md管理命令通过它们认证到目标后端。另外注意文档中--replace -y被反复强调为不可逆因为--replace会替换目标表中的全部现有数据而-y会跳过确认提示。清除单个表清除一张表的数据本质上就是导入一个空文件到这个表并替换其内容npx convex import --table $tableName --replace --format jsonLines /dev/null -y各参数含义如下与 CLI 定义一致见 npm-packages/convex/src/cli/lib/command.ts参数作用--table $tableName目标表名。csv / jsonLines / jsonArray 格式下为必填项zip 格式下不允许使用--replace替换该表中全部现有数据与--append、--replace-all互斥--format jsonLines输入文件格式取值csv、jsonLines、jsonArray、zip之一/dev/null空输入文件读取到的字节数为 0等价于零条记录-y, --yes跳过导入将删除现有文档的确认提示为什么这里必须显式传--format jsonLines因为 CLI 会先尝试从文件扩展名推断格式见 convexImport.ts 的determineFormat.csv→ csv、.jsonl→ jsonLines、.json→ jsonArray、.zip→ zip而/dev/null没有任何扩展名无法推断若不显式指定格式CLI 会直接报错No input file format inferred by the filename extension or specified。关于 /dev/null 的平台差异/dev/null是 Linux 与 macOS 上的空设备文件天然可用作空导入文件。但WindowsPowerShell没有/dev/null此时需要先创建一个真正的空文件再引用它例如New-Item -ItemType File -Name empty.jsonl npx convex import --table $tableName --replace --format jsonLines empty.jsonl -yCLI 侧会调用ctx.fs.exists(filePath)校验文件存在convexImport.ts因此必须确保传入的路径真实存在。清除应用中的全部表清除整个应用所有用户表的数据原文档给出的一行式命令如下for tableName in npx convex data; do npx convex import --table $tableName --replace -y --format jsonLines /dev/null; done这条命令分两步协作枚举表名npx convex data不带表名参数时列出部署中所有表。CLI 侧通过系统函数_system/cli/tables分页查询表清单并排序输出见 npm-packages/convex/src/cli/lib/data.ts每个表名占一行正好作为for循环的迭代项逐表清空对每个表执行一次空文件 --replace导入即前文介绍的清除单个表。这条命令会遍历所有表逐一执行因此对目标部署的数据是破坏性的——这正是为什么原文档要求先确认CONVEX_SELF_HOSTED_URL指向正确且命令后附-y跳过确认。建议在实际执行前先只跑npx convex data观察输出确认表清单符合预期。清除组件Component中的全部表使用 Convex Components 的应用表是挂在组件命名空间下的清除方式需要同时指定组件路径for tableName in npx convex data --component $component; do npx convex import --component $component --table $tableName --replace -y --format jsonLines /dev/null; done与上一节相比有两处变化枚举时限定组件npx convex data --component $component只列出该组件下的表其中$component是组件路径例如workflow或workflow/workpool见 command.ts 对--component的说明导入时同样限定组件npx convex import --component $component ...把空导入定向到对应组件的命名空间。底层原理清除如何通过快照导入实现后端核心实现clear_tables后端为清空表提供了专门的原子实现clear_tables位于 crates/application/src/snapshot_import/mod.rs其文档注释直接揭示了设计本质Clears tables atomically. This is implemented as an import of empty tables in Replace mode.也就是说清空一张表 创建一张同名空表create_empty_table然后以Replace 模式完成导入最终由finalize_import把旧表替换掉。注释还特别提醒了一个边界行为N.B.: This will create components and tables if they dont exist.—— 如果组件或表本身不存在清除操作会顺带创建它们因此目标名务必写对。三种导入模式与互斥关系CLI 在 convexImport.ts 中把模式映射为三类requireEmpty默认目标表必须为空才能导入append把数据追加到现有表replace替换目标表中的全部数据清空命令使用此模式replaceAll全量替换整个部署删除未出现在导入文件或 schema 中的表。CLI 层通过.conflicts(...)强制了--replace、--append、--replace-all三者互斥command.ts避免语义冲突。写入隐藏表原子切换快照导入并非直接把数据写进活动表。根据 mod.rs 的模块注释整个流程是parse_import解析导入文件得到ParsedImport同时保存当前数据库的 schema 副本import_objects把数据写入隐藏表hidden tablesappend模式除外期间用模拟的表映射校验 schema 约束finalize_import在单个事务内删除被替换的表并把隐藏表提升promote为活动表随后再做一轮 schema 检查见 schema_constraints.rs与表号唯一性校验最终通过TableModel::activate_tables完成切换。这套先写隐藏表、后原子切换的设计保证了即使导入中途失败也不会留下半清空的活动表--replace语义对客户端而言是全有或全无。这也是为什么清库可以放心复用导入通道——它本质上是导入引擎的一个特例导入内容为空。后台执行与状态机导入在服务端是异步执行的。后端有独立的SnapshotImportWorkercrates/application/src/snapshot_import/worker.rs它订阅_snapshot_imports表将处于Uploaded状态的导入解析为WaitingForConfirmation将InProgress的导入交给SnapshotImportExecutor执行失败时按 30 秒起步、最长 300 秒的退避策略重试。CLI 侧对应的状态机是uploaded → waiting_for_confirmation → in_progress → completed / failedconvexImport.ts。waiting_for_confirmation状态下 CLI 会打印确认信息只有在传了-y或服务端判定无需人工确认时才自动继续——这也解释了文档命令中-y的用途。上传链路与分块参数CLI 通过三个 REST 端点完成文件上传/api/import/start_upload获取上传令牌、/api/import/upload_part逐块上传、/api/import/finish_upload提交导入参数与分块令牌convexImport.ts。默认分块大小为 5 MiB后端除最后一块外的最小分块要求可通过环境变量CONVEX_IMPORT_CHUNK_SIZE字节覆盖同时后端拒绝 10,000 个及以上的分块CLI 会据此自动放大块大小convexImport.ts。对清库场景而言空文件只有零字节这些参数影响不大但了解它们有助于理解导入链路的健壮性设计。参数速查与注意事项参数说明--table table目标表名csv / jsonLines / jsonArray 格式必填--replace替换目标表全部数据与--append、--replace-all互斥--replace-all用导入文件替换整个部署删除未出现的表、清空 schema 中但未出现在导入文件的表--append追加数据到现有表-y, --yes跳过删除现有文档前的确认提示--format formatcsv/jsonLines/jsonArray/zip文件名无扩展名时必填--component path组件路径如workflow或workflow/workpoolCONVEX_IMPORT_CHUNK_SIZE覆盖上传分块大小字节默认 5 MiB实践要点汇总先备份npx convex export --path backup.zip先核对echo $CONVEX_SELF_HOSTED_URL与npx convex data的输出理解不可逆--replace-y意味着零确认直接清空请仅在确认无误的部署上执行注意平台差异Windows 下用真实空文件替代/dev/null善用验证npx convex import --help可查看当前 CLI 版本的实际 flag 行为本文命令已在convexlatest2026-06 版本验证遗留数据排查清除只针对文档数据若需要彻底清理文件存储等请结合 s3_storage.md、knobs.md 等高级配置文档评估。最后提醒这些命令面向的是自托管部署CONVEX_SELF_HOSTED_URLCONVEX_SELF_HOSTED_ADMIN_KEY认证方式与云托管部署的认证模型不同。若你的自托管后端以 Docker Compose 方式运行可参考 self-hosted/README.md 与 docker/docker-compose.yml 确认环境变量配置无误后再执行清库操作。赞分享数据库后端【免费下载链接】convex-backendThe open-source reactive database for app developers项目地址https://gitcode.com/gh_mirrors/co/convex-backend点击查看免费下载相关推荐Apache Paimon 数据快照管理完全指南Apache Paimon 数据快照管理完全指南 什么是数据快照 在 Apache Paimon 中数据快照 Snapshot 是表在某一时刻完整状态的记录。数据湖湖仓一体大数据流处理TuGraph数据库数据导入完全指南TuGraph数据库数据导入完全指南 引言 TuGraph作为一款高性能的图数据库提供了强大的数据导入功能能够帮助用户快速将各类数据源导入数据库。本文将全面数据库图数据库图计算后端ToolJet 内置数据库ToolJet Database完全指南零配置托管数据库、PostgREST 架构与数据管理实战ToolJet 内置数据库ToolJet Database完全指南零配置托管数据库、PostgREST 架构与数据管理实战 ToolJet Databas低代码后端前端AI 应用MCP 服务创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Java大文件上传内存优化:分片与流式处理全解析

Java大文件上传内存优化:分片与流式处理全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:06:55 阅读更多 →
Windows镜像补丁集成:boot.wim与install.wim分级注入实战

Windows镜像补丁集成:boot.wim与install.wim分级注入实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:06:55 阅读更多 →
ST-LINK Utility烧录STM32全指南:SWD与JTAG实战

ST-LINK Utility烧录STM32全指南:SWD与JTAG实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:06:54 阅读更多 →

最新新闻

RenderDoc 功能测试与验证指南:从 ad-hoc 手测到自动化测试套件

RenderDoc 功能测试与验证指南:从 ad-hoc 手测到自动化测试套件

开发工具调试器图形学GPU 【免费下载链接】renderdoc RenderDoc is a stand-alone graphics debugging tool. 项目地址: https://gitcode.com/gh_mirrors/re/renderdoc 点击查看 免费下载 本指南面向 RenderDoc 的贡献者与二次开发者,系统说明在为 Rend…

2026/9/24 4:51:31 阅读更多 →
DP83848工业以太网PHY设计调试全攻略:从硬件到驱动

DP83848工业以太网PHY设计调试全攻略:从硬件到驱动

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:51:30 阅读更多 →
Swagger Codegen 生成 Java 客户端指南:解析 google-api-client 版 AnotherFakeApi 与 testSpecialTags 调用

Swagger Codegen 生成 Java 客户端指南:解析 google-api-client 版 AnotherFakeApi 与 testSpecialTags 调用

开发工具代码生成API设计 【免费下载链接】swagger-codegen swagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. 项目地址: http…

2026/9/24 4:51:30 阅读更多 →
Spring 循环依赖:三级缓存背得再熟,不如看这 3 个线上坑

Spring 循环依赖:三级缓存背得再熟,不如看这 3 个线上坑

循环依赖是 Spring 项目里一不留神就会碰到的问题,尤其在多人开发的项目里:两个人各写各的 Service,一个要调 A,一个要调 B,合代码时谁也没注意互相引了——启动直接红字: BeanCurrentlyInCreationExceptio…

2026/9/24 4:51:28 阅读更多 →
黄金微针按次报价怎样核对包含项和变更差价

黄金微针按次报价怎样核对包含项和变更差价

黄金微针写着“按次收费”,并不自动说明一次包括哪些内容。到了比较报价或调整方案时,真正影响支出的,是服务范围怎样变化、原付款有多少可以用于新方案,以及哪些款项仍在单独处理中。先统一口径,再算差额,…

2026/9/24 4:50:28 阅读更多 →
国产安全MCU LKT6830C开发实战:硬件加密与防篡改设计

国产安全MCU LKT6830C开发实战:硬件加密与防篡改设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:50:28 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →