从 Flarum 导入主题时出错 (用户、用户组导入成功)

大家好,我真心希望有人能帮我解决我正在进行的 Flarum 到 Discourse 的迁移问题。我凭借自学弥补了大量知识盲区,并根据当前导入器所基于的假设(例如数据库前缀)解决了一些错误。经过一番努力,我终于成功导入了分类和用户!:partying_face:

但现在我在导入实际的主题时遇到了问题,而这些显然是最重要的内容之一。:grinning_face_with_smiling_eyes: 不幸的是,关于我遇到的这个具体错误信息,我几乎找不到任何相关资料。这里只有一个较旧的 Meta 主题,但从未收到过回复,所以那里也帮不上忙。我希望能有更好的进展。:grin:

以下是完整的错误信息。底部附近的部分似乎是问题的关键所在。被识别出的“重复键值”实在太过模糊,让我束手无策。提前感谢大家提供的任何见解!

An error occurred while loading ./script/import_scripts/flarum_import.rb.
Failure/Error: return exec_without_profiling(*args, &blk) unless SqlPatches.should_measure?

PG::InFailedSqlTransaction:
  ERROR:  current transaction is aborted, commands ignored until end of transaction block
# ./script/import_scripts/base.rb:243:in `ensure in block in all_records_exist?'
# ./script/import_scripts/base.rb:243:in `block in all_records_exist?'
# ./script/import_scripts/base.rb:224:in `all_records_exist?'
# ./script/import_scripts/flarum_import.rb:122:in `block in import_posts'
# ./script/import_scripts/base.rb:874:in `block in batches'
# ./script/import_scripts/base.rb:873:in `loop'
# ./script/import_scripts/base.rb:873:in `batches'
# ./script/import_scripts/flarum_import.rb:101:in `import_posts'
# ./script/import_scripts/flarum_import.rb:32:in `execute'
# ./script/import_scripts/base.rb:47:in `perform'
# ./script/import_scripts/flarum_import.rb:162:in `<top (required)>'
# ------------------
# --- Caused by: ---
# PG::UniqueViolation:
#   ERROR:  duplicate key value violates unique constraint "import_ids_pkey"
#   DETAIL:  Key (val)=(3) already exists.
#   ./script/import_scripts/base.rb:231:in `block in all_records_exist?'
No examples found.


Finished in 0.00004 seconds (files took 5.56 seconds to load)
0 examples, 0 failures, 1 error occurred outside of examples

听起来像是索引损坏,这有点令人意外。这是哪个版本的 PostgreSQL?我可能会选择清空数据库并重试。在调试其他主题相关问题的过程中,你可能无论如何都需要多次这样做。

另一个选项是尝试重建该索引,并删除重复的记录,直到问题解决。

3 个赞

谢谢 Jay!不幸的是,由于我本人的愚蠢操作(错误处理虚拟机),我丢失了这个 Discourse 安装。所以我无法回去检查,也无法执行你推荐的故障排查步骤,这让我感到非常沮丧和自责。但事实就是这样。

我可以告诉你的是,我遵循了 Discourse 的 Ubuntu 设置指南:

因此,安装的应该是通过该方式安装的某个版本的 PostgreSQL。在此之前,我已经尝试过几次导入,但中间没有清理数据库,所以这可能也是原因之一。

我采用的是 Ubuntu 开发环境方法,而不是 Docker 方案,因为之前我在 Digital Ocean 上尝试 Docker 时,找不到任何有效的操作指南——无论做什么都不行,大概是因为它运行在 Docker/容器中,需要不同的处理方式。

不幸的是,我目前确实是在自己理解的极限边缘操作,但我觉得至少尝试自己动手是值得的。面对这次重大挫折,并且意识到接下来可能还有更多需要排查的问题,我认为现在确实该考虑寻求专业帮助了。所以我打算去争取一些预算来做这件事。:grinning_face_with_smiling_eyes:

再次感谢你的帮助!

太好了!除非再次发生,否则没必要去弄清楚到底出了什么问题。

2 个赞