3

アプリで Heroku 共有データベースをしばらく使用していますが、新しい Basic/Crane などにアップグレードしたいと考えています。生産グレードのデータベース。しかし、それを行うための明確な道筋は見えません。

私が見ているオプションは次のとおりです。

  1. db:pull/db:push を使用して、データ/スキーマを現在の実稼働データベースから新しいデータベースに移行できます。メンテナンス モードに入り、データを移動してから、新しいデータベースを指すように構成を更新できます。ひどいことではありませんが、共有データベースの古いスキーマは v9 と互換性がないのではないでしょうか? たぶん私は間違っています。また、これには長い時間がかかり、大きなダウンタイムが発生する可能性があります。クールではありません。

  2. pg:backups を使用してバックアップを作成し、heroku pg:restore を使用してデータを移動します。繰り返しますが、同じスキーマの問題を恐れていますが、これははるかに高速です。

  3. Basic/Crane データベースから始めて、フォロワーの概念を使用します。これは正しい方法のように思えますが、これが共有データベースで機能するかどうかはわかりません。もしそうなら、私はその方法を理解していません。

新しいデータベースはすべて v9 であるため、これらのオプションはすべて、ある時点で postgres v9 にアップグレードする必要があると感じています。共有環境でこれを行う方法はありますか?移行の手間が減るかもしれません...多分。

アイデアや提案はありますか?

4

2 に答える 2

2

彼らのMigrating Between Databasesドキュメントは、オプション (3) フォロワーを使用して高速切り替えを行うことは、共有インスタンスから開始する場合には機能しないことを指摘しています。ここですべきことは、pg:backups を使用して 2 番目のデータベースを作成し、アプリケーションをテストして、新しいデータベースがそこで正しく動作することを確認することです。それが機能する場合は、メンテナンス モードをオンにして、実際の移行のためにもう一度実行します。

PostgreSQL 8.4 と 9.1 の間で発生するスキーマ レベルの非互換性の問題はほとんどありません。その移行ドキュメントは、そのうちの 1 つである Bytea の変更について警告しています。Bytea を使用している場合は、おそらくそれを知っているでしょう。それほど一般的ではありません。これらのバージョン間で変更された他のほとんどの機能は、PostgreSQL 9.0 で行われたPL/pgSQL の変更など、使用する可能性が低い機能でもあります。繰り返しますが、PL/pgSQL サーバー側関数を使用している場合は、おそらくそれも知っているでしょうが、Heroku のほとんどの人は知りません。

于 2012-07-31T00:27:00.920 に答える
1

データベースに互換性があるかどうかを推測しないでください。テストしてください。PostgreSQL の複数のコピーをローカルで実行できます。異なるデータ ディレクトリとポートを構成する必要があるだけです。そうすれば、9.1 と 8.4 に対して自由にテストできます。

通常、9.1 の pg_dump を使用して 8.4 データベースをダンプします。pg_dump は古いバージョンを認識しますが、新しいバージョンは認識しません (明らかに)。

データベースで異常なことをしていない限り (Heroku を使用しているため、おそらくそうではありません)、ダンプとバージョン間の復元だけで問題が発生する可能性はほとんどありません。

于 2012-07-30T13:43:35.937 に答える