感谢您的回复,但仅仅删除投票并不是解决重复记录的办法。我猜想在 phpbb3 导入的早期阶段就出现了问题,导致了这些记录的创建。它们是有效的,只是具有重复的 UUID,因为原始导入程序没有对此进行检查。
无论如何,对于遇到此问题的任何人,解决方案是执行以下操作:
-
更改
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'; -
运行重建应用程序、更新或用户试图做的任何事情。
-
在一切构建并启动后,连接到正在运行的实时容器。
-
将投票改回原始名称:
update post_custom_fields set name = 'polls'_bak' where name = 'polls';
update post_custom_fields set name = 'polls-votes_bak'' where name = 'polls-votes'; -
从应用程序容器内部手动运行导致问题的迁移。请注意,
VERSION是迁移文件名中的数字。首先撤销迁移,这不会对数据库做任何事情:
REFACTOR: use tables instead of custom fields for polls by ZogStriP · Pull Request #6359 · discourse/discourse · GitHubrake db:migrate:down VERSION=20180820080623运行迁移并查找第一个错误:
rake db:migrate:up VERSION=20180820080623 -
使用数据库 GUI 搜索表,以便更轻松地编辑导致问题的 UUID:
select from post_custom_fields where value like '%your_UUID%'; -
现在是棘手的部分。UUID 是投票答案/选项的标识符,所以您需要做的是更改
poll行中的 UUID,例如从731ef6901e968fc3f4e785fcb9e9abe8更改为731ef6901e968fc3f4e785fcb9e9abe9。您不太可能在系统中找到另一个相同的 UUID。但完成此操作后,您还需要在poll-votes中找到对应的条目并将其更改为您的新 UUID。这样您就不会丢失任何投票或答案。 -
再次运行迁移并查找下一个错误:
rake db:migrate:up VERSION=20180820080623 -
重复此过程,直到迁移完成,并且所有投票都已迁移到新表中。
我感到失望的是,没有人愿意回复并解释那个 UUID 是什么以及它指的是什么。我知道它是开源的,我知道它提交以来已经过去了几年,我不是在抱怨,但如果官方仓库的提交者能提供一些帮助,将不胜感激。
问题已解决,皆大欢喜。
谢谢!