迁移到LogseqDBSkill migrating-to-db

专家级指导,帮助用户将 Logseq 图从 Markdown 格式迁移到数据库格式,包括转换策略、常见问题和最佳实践。

低代码开发 0 次安装 0 次浏览 更新于 3/3/2026

迁移到 Logseq DB

何时使用此技能

此技能在以下情况下自动触发:

  • 用户询问从 Logseq MD 版本迁移到 DB 版本
  • 将 Markdown 图转换为数据库格式
  • 在 Logseq 版本之间导入/导出
  • 有关迁移过程中转移内容的问题
  • 迁移过程中的命名空间处理
  • 标签到类的转换决策
  • 导入过程中的属性类型推断
  • 用户提及“迁移”、“转换”、“MD 到 DB”、“Markdown 到数据库”

您是将 Logseq 图从 MD(Markdown)格式迁移到 DB(Database)格式的专家。

迁移概览

为什么迁移?

功能 MD 版本 DB 版本
存储 Markdown 文件 SQLite 数据库
标签 页面引用 类与属性
属性 文本字符串 类型化值
查询 有限 完整的 Datalog
同步 基于文件 实时(订阅)
性能 文件 I/O 依赖 优化查询

当前状态(2024-2025)

重要:Logseq DB 仍在 alpha 阶段。考虑:

  • 存在数据丢失风险
  • 一些功能尚未可用(白板)
  • 插件兼容性各异
  • 需要订阅才能同步

迁移前清单

迁移前,请评估您的图:

1. 备份一切

# 创建带时间戳的备份
cp -r ~/logseq/my-graph ~/logseq/my-graph-backup-$(date +%Y%m%d)

# 或压缩
tar -czvf my-graph-backup.tar.gz ~/logseq/my-graph

2. 审核当前结构

需要审核的页面:

  • [ ] 命名空间页面(a/b/c)→ 可能成为单独的页面
  • [ ] 同名但不同命名空间的页面
  • [ ] 模板页面
  • [ ] 查询页面

需要审核的属性:

  • [ ] 属性格式(key:: value)
  • [ ] 多值属性
  • [ ] 日期属性
  • [ ] 链接属性([[page]])

需要审核的标签:

  • [ ] 简单标签(#tag)
  • [ ] 页面标签([[tag]])
  • [ ] 嵌套标签(#parent/child)

3. 确定迁移决策

MD 模式 DB 选项 需要决策
#tag 类或页面引用 哪些标签变成类?
[[page]] 节点引用 保持为引用
property:: value 类型化属性 什么类型?
namespace/page 单独页面或层级 展平或嵌套?

迁移过程

第 1 步:从 MD 版本导出

  1. 在 Logseq 中打开您的 MD 图
  2. 转到 设置导出
  3. 选择 导出为 EDN(完整数据)
  4. 保存导出文件

第 2 步:准备导入设置

导入到 DB 时,您将选择:

标签处理:

  • 转换为类:标签变成具有继承属性的适当类
  • 保持为引用:标签保持为简单的页面链接

命名空间处理:

  • 展平a/b/c → 单个页面 “a/b/c”
  • 层级:创建页面层级

属性处理:

  • 推断类型:Logseq 猜测类型(数字,日期等)
  • 全部为文本:一切保持为字符串

第 3 步:创建新的 DB 图

  1. 在 Logseq 中创建新的基于 DB 的图
  2. 使用 导入 功能
  3. 选择您导出的数据
  4. 配置迁移选项
  5. 审核并确认

第 4 步:迁移后验证

;; 检查页面数量是否匹配
[:find (count ?p)
 :where [?p :block/tags ?t]
        [?t :db/ident :logseq.class/Page]]

;; 检查孤立块
[:find (pull ?b [:block/title])
 :where [?b :block/title _]
        (not [?b :block/page _])
        (not [?b :block/tags ?t]
             [?t :db/ident :logseq.class/Page])]

;; 验证属性迁移
[:find ?prop-name (count ?b)
 :where [?b ?prop _]
        [?p :db/ident ?prop]
        [?p :block/title ?prop-name]
        [(clojure.string/starts-with? (str ?prop) ":user.property")]]

常见迁移问题

问题 1:丢失属性类型

症状:数字/日期存储为字符串

解决方案:手动更新属性类型

;; 在 DB 中,更新属性类型
{:db/ident :user.property/rating
 :logseq.property/type :number}  ; 原来是 :default

问题 2:标签/类混淆

症状:标签没有变成适当的类

解决方案:将页面转换为类

  1. 打开标签页面
  2. 添加 #Tag 使其成为类
  3. 在类上定义属性

问题 3:断开的引用

症状[[page]] 链接不起作用

原因:迁移过程中页面名称更改

解决方案:使用查找/替换或查询识别断开的引用

[:find ?ref-text
 :where
 [?b :block/title ?title]
 [(re-find #"\[\[.*?\]\]" ?title) ?ref-text]
 (not [_ :block/title ?ref-text])]

问题 4:命名空间展平

症状project/tasksproject/notes 合并

解决方案:迁移前重命名页面以避免冲突

问题 5:查询兼容性

症状:旧查询不起作用

原因:不同的属性名称

MD 属性 DB 属性
:block/content :block/title
:block/name :block/title
:page/tags :block/tags

迁移策略

策略 1:大爆炸迁移

  • 一次性迁移整个图
  • 最适合:小型图,简单结构
  • 风险:全有或全无

策略 2:并行操作

  • 保持 MD 图活跃
  • 为新内容创建 DB 图
  • 逐步移动旧内容
  • 最适合:大型图,活跃使用

策略 3:选择性迁移

  • 导出特定页面/区域
  • 导入到新的 DB 图中
  • 最适合:需要清理的混乱图

最佳实践

迁移前

  1. 清理您的图

    • 删除未使用的页面
    • 标准化属性名称
    • 修复断开的链接
  2. 记录您的结构

    • 列出所有标签及其用途
    • 记录属性含义
    • 映射命名空间
  3. 规划您的类

    • 哪些标签变成类?
    • 它们需要什么属性?
    • 定义继承层级

迁移期间

  1. 从小处开始 - 用子集测试
  2. 比较计数 - 页面,块,属性
  3. 检查关键页面 - 首先检查最重要的内容
  4. 验证查询 - 更新并测试所有查询

迁移后

  1. 不要删除 MD 图 - 作为备份保留
  2. 监控问题 - 记录问题以供反馈
  3. 更新工作流 - 适应新功能
  4. 探索新功能 - 类,类型化属性

功能比较

DB 版本中可用

  • ✅ 类型化属性(数字,日期,复选框)
  • ✅ 类继承
  • ✅ 属性模式
  • ✅ 完整的 Datalog 查询
  • ✅ 实时协作(Pro)
  • ✅ 图书馆视图

Alpha 版本尚未可用

  • ⏳ 白板
  • ⏳ 一些插件
  • ⏳ 完整的导出选项
  • ⏳ 高级模板

不同行为

  • 📝 标签 = 类(更强大但不同)
  • 📝 同步需要订阅
  • 📝 文件访问有限(SQLite,不是 .md)

资源