将旧数据库导入到最新版本

感谢您的回复,但仅仅删除投票并不是解决重复记录的办法。我猜想在 phpbb3 导入的早期阶段就出现了问题,导致了这些记录的创建。它们是有效的,只是具有重复的 UUID,因为原始导入程序没有对此进行检查。

无论如何,对于遇到此问题的任何人,解决方案是执行以下操作:

  1. 更改 post_custom_fields 表中有问题的记录,将它们移开。最好这样做,而不是等待几分钟的重建,结果却看到另一个错误。

    update post_custom_fields set name = 'polls' where name = 'polls_bak';
    update post_custom_fields set name = 'polls-votes' where name = 'polls-votes_bak';

  2. 运行重建应用程序、更新或用户试图做的任何事情。

  3. 在一切构建并启动后,连接到正在运行的实时容器。

  4. 将投票改回原始名称:

    update post_custom_fields set name = 'polls'_bak' where name = 'polls';
    update post_custom_fields set name = 'polls-votes_bak'' where name = 'polls-votes';

  5. 从应用程序容器内部手动运行导致问题的迁移。请注意,VERSION 是迁移文件名中的数字。

    首先撤销迁移,这不会对数据库做任何事情:
    REFACTOR: use tables instead of custom fields for polls by ZogStriP · Pull Request #6359 · discourse/discourse · GitHub

    rake db:migrate:down VERSION=20180820080623

    运行迁移并查找第一个错误:

    rake db:migrate:up VERSION=20180820080623

  6. 使用数据库 GUI 搜索表,以便更轻松地编辑导致问题的 UUID:

    select from post_custom_fields where value like '%your_UUID%';

  7. 现在是棘手的部分。UUID 是投票答案/选项的标识符,所以您需要做的是更改 poll 行中的 UUID,例如从 731ef6901e968fc3f4e785fcb9e9abe8 更改为 731ef6901e968fc3f4e785fcb9e9abe9。您不太可能在系统中找到另一个相同的 UUID。但完成此操作后,您还需要在 poll-votes 中找到对应的条目并将其更改为您的新 UUID。这样您就不会丢失任何投票或答案。

  8. 再次运行迁移并查找下一个错误:

    rake db:migrate:up VERSION=20180820080623

  9. 重复此过程,直到迁移完成,并且所有投票都已迁移到新表中。

我感到失望的是,没有人愿意回复并解释那个 UUID 是什么以及它指的是什么。我知道它是开源的,我知道它提交以来已经过去了几年,我不是在抱怨,但如果官方仓库的提交者能提供一些帮助,将不胜感激。

问题已解决,皆大欢喜。

谢谢!