如何重建 Discourse 的 PostgreSQL 数据库索引

真是碰到一个问题解决一个问题,刚刚创建话题时提示 500 错误,然后再日志中找到了如下的错误:

ActiveRecord::StatementInvalid (PG::IndexCorrupted: ERROR:  right sibling's left-link doesn't match: block 854 links to 1392 instead of expected 1 in index "index_users_on_secure_identifier"

感觉这次搬家把数据库搬崩溃了,于是尝试重建一下索引:

cd /var/discourse
./launcher enter app
rails dbconsole
discourse=> REINDEX SCHEMA CONCURRENTLY public;

重建索引之后,发布成功。

Screen-Appinn2021-11-08 10.07.43

对于一个没接触过 Rails 和 PostgreSQL 的野生程序员,我尽力了啊。

另外,解决问题的流程大概是这样的:

  1. 发现问题
  2. 查询错误日志
  3. 检索 discourse 官方交流论坛
  4. 用英文
  5. 别用中文
  6. 确保有备份 & 不断尝试
  7. 记录下来,以防再次发生重复的问题
1 个赞

果然是索引问题.

./launcher enter app
這句是作何用的?

进入 docker 容器

“文件”应为“问题”?

原来這就是docker!百聞不如一見。

這貨像是linux的終端,命令行。

啊是啊由错别字了

是的,在终端操作

嗯,是”又错别字”

1 个赞

一般来说,只要是搬家, 就一定要做数据库索引重建. 除非能保证环境完全一摸一样.

2 个赞

我猜你是用五筆的。

怪不得數據庫每次都要重新導入。