[网站宕机 :(] 升级\重建失败 - 数据库迁移问题?

今天正在升级到 Discourse 的当前版本,重建失败,我不确定是什么原因造成的。安装已经落后了好几个版本(我认为是 2.8x)。当我尝试升级 Discourse 时,Docker 镜像更新进展顺利,被要求手动拉取并重建(大多数时候我都会收到这个提示),但是重建不成功。

这是使用 discourse-doctor 搜索“error”的结果。抱歉使用截图,我使用的基于 Web 的 VNC 客户端似乎不支持复制粘贴。

image

它似乎认为您有两个名为 racerx 的用户。我认为这里有一个关于类似问题的帖子:

这里还有一个最近的帖子:

4 个赞

谢谢,我将开始沿着这条路走下去……祝我好运……

1 个赞

我不知道如何开始重新索引。我已经能够启动(虽然它无法通过网络访问)并进入应用程序,但无法继续前进。

image

2 个赞

您需要在容器内运行这些命令。类似这样:

./launcher start app
./launcher enter app

在您 sudo postgres 之前。

编辑:哦,您已经进入容器了。

那个 postgres -c 需要在其前面加上 sudo

4 个赞

我猜 sudo 不会起作用,但 su 可以,现在我在浏览 postgres。

所以现在我需要弄清楚如何实际修复重复项。查询似乎是…

UPDATE users SET username_lower = 'xxx' WHERE id = xxx;

我尝试了几种变体但都没有成功。正如你所看到的,我并不完全确定正确的语法是什么,因为错误与列有关。

我会继续挖掘。我还不知道有多少重复项…

/编辑… 只是 racerx。该死的 RACERX!

image

2 个赞

你弄清楚怎么修复它了吗?

我也会返回用户的 ID(它是唯一的),以便正确识别他们,然后重命名这两个用户中的一个 :slight_smile:

4 个赞

正如 @Canapin 所说,如果你还没有弄清楚,既然你已经确定 racerx 是唯一重复的用户名,那么让用户名唯一应该是很简单的。

首先,如果你还没有这样做,请确保 racerx2 尚不存在,这样你就不会只是把问题转移到另一个用户名上:(如果你得到一个 id,请尝试另一个用户名。)

SELECT id FROM users WHERE username_lower = 'racerx2';

一旦你有一个未使用的用户名,就获取重复的 racerx 账户的 ID:

SELECT id from users WHERE username_lower = 'racerx';

选择其中一个,哪个都可以,但我建议选择最大的那个,然后更改其用户名:(如果需要,请将 racerx2 替换为不同的用户名,并将 12345 替换为你选择的 racerx 的 ID。)

UPDATE users SET username_lower = 'racerx2' WHERE id = 12345;
3 个赞

更新(草稿中放了几日,抱歉)看起来我搞定了。不确定我所做的是否是正确的方法,但它已成功重建。

发现很难使用该语法修改/追加 username_lower 列中的 racerx 值,所以我采取了另一种方法。通过查找行的 ID,并在特定行中修改 username_lower 值。

首先,我尝试获取 users 表中 username_lower 列包含“racerx”的行的报告。

select all from users where username_lower ='racerx';

基于此,我决定将 racerx 修改为 racerx2,我不记得具体输入了什么来实现这一点。我认为UPDATE SET from users username_lower racerx to racerx2

2 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.