Rails& postgres - 恢复后的reindex

时间:2014-08-09 22:21:04

标签: ruby-on-rails postgresql heroku restore reindex

最近我遇到了一个情况,我必须将备份数据库从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或console重新索引表格?

对于searchkick,我使用:

rake searchkick:reindex CLASS=Blog

在模特中我使用的是:

blog.reindex

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

1 个答案:

答案 0 :(得分:1)

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

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

  1. 在本地数据库上,使用 dropdb 命令删除整个
  2. 使用 createdb
  3. 重新创建空白数据库
  4. 然后针对空DB运行 pg_restore 命令。这将从备份中恢复所有数据,并且提供索引是备份的一部分(它们应该在整个数据库的备份中),那些也应该用新恢复的数据填充。