是否可以从数据库中删除帖子?

如果这个问题太基础,我先提前道个歉。
我可以通过插件访问 Discourse 数据库。
我能否使用查询语句删除一些我自己测试时大量创建的帖子?

delete from posts where id in (123, 567, ... etc)

执行此类操作安全吗?

1 个赞

如果您是通过 Data Explorer 插件访问数据库,请注意该插件仅允许执行只读查询,无法用于向数据库写入数据。

虽然可以通过 Rails 控制台完全删除帖子,但我们不建议这样做。最佳做法是使用 Data Explorer 插件查找您想要删除的帖子,然后利用 Discourse 用户界面上提供的工具来移除这些帖子。

如果由于某种原因此方法对您不适用,请告知我们,我们可以为您提供关于从 Rails 控制台删除帖子的详细信息。

9 个赞

我不是这个引擎的专家,但我觉得这样做不安全。因为这样只会从 posts 表中删除记录,而一条帖子可能在其他表中有关联的记录,并且有大量与该 post_id 关联的元数据。之后可能会导致某些功能出错。因此,你应该使用集成的工具来删除帖子。

2 个赞

谢谢尼古拉。
我也这么想……不过突然之间,这个应用的真正专家可能会现身,然后他们会说:随意删除吧!)))

但没有任何专家表示这是可以接受的:

  • 不建议这样做。
  • 这不在 Discourse 的路线图之中,也没有计划添加此功能。
  • 由于永久删除无法撤销,因此该功能并未被开发。
  • 没有人出资开发此功能。

所有提出此需求的人均未开发该功能,因为其要么过于困难,要么开发成本不值得。

请参阅以下主题以了解这些观点的示例:

1 个赞

我不敢自称为专家,但多年来我确实查看、分析并实践过不少文件和代码。

我见过的情况足以让我确信,仅凭自己目前的知识水平,在本地环境中进行实验尚可,但若要更进一步则力有未逮。我所见到和未曾见到的内容,都让我心生顾虑。

我从未见过任何“ON DELETE CASCADE”的用法。相反,我在许多模型文件中看到了大量的“has_many”、“dependent:”、“索引”以及“ensure_consistency”。此外,还有一个任务文件:discourse/app/jobs/scheduled/ensure_db_consistency.rb at main · discourse/discourse · GitHub

就我个人而言,尽管我非常喜欢 Discourse,但我并不期望它会去处理那些超出核心保护机制之外操作所带来的后果。也就是说,我常常弄坏自己的代码,但一旦发生,我会完全承担责任。不过这只是我个人的做法。当然,也可能存在一些我尚未知晓的核心代码。

1 个赞

另外,

但这在 OP 的情况下毫无意义。

4 个赞