恢复时出现问题:“mirror_topic_timers_topic_id”函数已存在且参数类型相同

我正在尝试将生产数据库从 04dbc622ab1e0197d16703ba47cf005ec93697ee 恢复到开发站点 f608e0cd7e7d4785b3ecb401999cfb837cfbe783

我遇到了这些错误:

数据库迁移失败。                                                                                                                           [90/9045]
忽略 db/schema_cache.yml,因为它已过期。当前架构版本是 20250724012518,但架构缓存文件中的版本是 20250916082012。
rake 中止!
StandardError: 发生错误,此迁移及之后的所有迁移都已取消: (StandardError)

PG::DuplicateFunction: 错误:  函数 “mirror_topic_timers_topic_id” 已存在且参数类型相同
/home/pfaffman/src/discourse-repos/discourse/lib/migration/safe_migrate.rb:107:in `async_exec'
/home/pfaffman/src/discourse-repos/discourse/db/migrate/20250902014817_add_timerable_id_to_topic_timer.rb:15:in `up'
/home/pfaffman/src/discourse-repos/discourse/lib/freedom_patches/schema_migration_details.rb:8:in `block in exec_migration'
/home/pfaffman/src/discourse-repos/discourse/lib/freedom_patches/schema_migration_details.rb:8:in `exec_migration'
/home/pfaffman/src/discourse-repos/discourse/lib/migration/safe_migrate.rb:28:in `migrate'
/home/pfaffman/src/discourse-repos/discourse/lib/migration/safe_migrate.rb:53:in `migrate'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/db.rake:267:in `block (2 levels) in <main>'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/db.rake:242:in `block in <main>'

导致:
ActiveRecord::StatementInvalid: PG::DuplicateFunction: 错误:  函数 “mirror_topic_timers_topic_id” 已存在且参数类型相同 (ActiveRecord::S
ntatementInvalid)
/home/pfaffman/src/discourse-repos/discourse/lib/migration/safe_migrate.rb:107:in `async_exec'
/home/pfaffman/src/discourse-repos/discourse/db/migrate/20250902014817_add_timerable_id_to_topic_timer.rb:15:in `up'
/home/pfaffman/src/discourse-repos/discourse/lib/freedom_patches/schema_migration_details.rb:8:in `block in exec_migration'
/home/pfaffman/src/discourse-repos/discourse/lib/freedom_patches/schema_migration_details.rb:8:in `exec_migration'
/home/pfaffman/src/discourse-repos/discourse/lib/migration/safe_migrate.rb:28:in `migrate'
/home/pfaffman/src/discourse-repos/discourse/lib/migration/safe_migrate.rb:53:in `migrate'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/db.rake:267:in `block (2 levels) in <main>'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:53:in `block in synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:49:in `synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/distributed_mutex.rb:34:in `synchronize'
/home/pfaffman/src/discourse-repos/discourse/lib/tasks/db.rake:242:in `block in <main>'

我认为这可能与此有关:

1 个赞

遇到了同样的问题(1e42f55be0 到 452e5064c9)。

1 个赞

我今天会看一下。

3 个赞

太疯狂了,我刚在我的开发版本中准备好了一切,这是我的第一个 Discourse 设置,正准备将其导入我刚安装的生产版本,结果就遇到了这个错误。谷歌上唯一的结果就是这个 5 小时前发布的帖子。希望它能被修复,这样我就可以上线了。

1 个赞

您可以设法使用此处列出的提交之前的提交来启动。

您需要删除现有数据库,使用之前的提交进行重建,然后很可能可以进行恢复。

而且 5 小时对于 SEO 来说相当不错。

我已提交一个包含修复的 PR,并将尽快进行审核。

5 个赞

这篇帖子发布后不久,它就被合并了!

3 个赞

此主题在最后回复后 7 天自动关闭。不再允许新回复。