恢复失败,函数“post_replies_sync_reply_id”已存在且参数类型相同

今天过得真不顺利。这个网站我之前就遇到过问题,当时是因为我在尝试将数据库复制到另一台服务器时操作失误。这些问题后来导致磁盘空间被占满,甚至彻底破坏了 PostgreSQL。现在我正尝试将其恢复到另一台数据库服务器上。备份是在较新版本的 Discourse(运行在 PG10 服务器上)中创建的,现在要恢复到 PG12 版本。

当我尝试恢复时,出现了以下错误:

ERROR: 函数 "post_replies_sync_reply_id" 已存在,且参数类型相同
EXCEPTION: psql 执行失败:ERROR: 函数 "post_replies_sync_reply_id" 已存在,且参数类型相同
/var/www/discourse/lib/backup_restore/database_restorer.rb:95:in `restore_dump'
/var/www/discourse/lib/backup_restore/database_restorer.rb:26:in `restore'
/var/www/discourse/lib/backup_restore/restorer.rb:49:in `run'
script/discourse:143:in `restore'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
script/discourse:284:in `<top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
/usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
/usr/local/bin/bundle:23:in `load'
/usr/local/bin/bundle:23:in `<main>'
正在尝试回滚...
正在回滚...
正在清理临时文件...
正在删除 discourse_functions 模式中的函数...
正在移除临时目录 '/var/www/discourse/tmp/restores/default/2020-07-04-061246'...
正在恢复 sidekiq...
正在禁用只读模式...
正在标记恢复完成...
正在通知 'system' 恢复已结束...
完成!
[FAILED]
恢复结束。

我注意到今年一月份有几个迁移脚本中包含了 post_replies_sync_reply_id,因此这个问题可能与我之前搞砸的数据库操作无关。

编辑:我已经通过删除该数据库并执行 psql < backup-file.sql 解决了这个数据库的问题,但我还有几个其他数据库需要恢复。

1 个赞