1

最近我遇到了一种情况,由于我犯了一个配置错误,我不得不将一个备份数据库从 Heroku 恢复到我的本地设置。

这在 Heroku 的帖子中非常直截了当:

https://devcenter.heroku.com/articles/heroku-postgres-import-export

$ heroku pgbackups:capture
$ curl -o latest.dump `heroku pgbackups:url`
$ pg_restore --verbose --clean --no-acl --no-owner -h localhost -U myuser -d mydb latest.dump

问题变成了在还原之后,一些旧的(还原前)索引数据仍在使用新还原的数据提供服务。即在还原和数据库迁移之后似乎仍有一些剩余的索引数据。请注意,在恢复之前,我没有清除或删除旧数据库或对旧数据库做任何事情......所以显然有一些数据仍然存在预恢复......表已经消失,但索引可能仍然存在。

我怀疑如果我对表进行了一些更改,这将导致对我所做的任何更改进行部分重新索引,并且将是对问题的某种类型的部分修复。果然,当我通过控制台更改记录时,剩余数据已更新(现在是正确的)。

所以我的问题是多部分的......

为什么还原没有清除数据库中的所有内容并“从头开始”?(还有其他方法吗?)

是否有更好的编程方式通过 rake 或控制台重新索引表?

对于 searchkick,我使用:

rake searchkick:reindex CLASS=Blog

在模型中,我使用类似的东西:

blog.reindex

但是我还没有找到一种命令/函数方法来做一个基本的表重新索引(没有某种类型的黑客来触及每条记录)。

4

1 回答 1

1

根据 OP 对我的评论的回复,我认为这是将完整数据库备份应用到现有数据库的结果,导致恢复的数据和现有数据(包括陈旧的索引)之间存在一些交叉授粉。

我建议的是,如果备份是整个数据库:

  1. 在本地数据库上,使用dropdb命令删除整个内容
  2. 使用createdb重新创建一个空白数据库
  3. 然后对空数据库运行pg_restore命令。这将从备份中恢复所有数据,并且,如果索引是该备份的一部分(它们应该在整个数据库的备份中),那么这些索引也应该填充新恢复的数据。
于 2014-08-10T04:11:41.183 回答