最近、構成エラーが原因で、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
しかし、基本的なテーブルの再インデックスを実行するコマンド/関数の方法は見つかりませんでした (すべてのレコードに触れるための何らかのハックなしで)。