1

私はdown関数をマイグレーションファイルに書き込む方法について不思議に思っています。理想的には、それは我々がupメソッドでやっていることとは正反対でなければなりません。ここで、up関数を書いて、カラムにuniqueという制約を追加し、いくつかの新しい行(重複データを持つ)をテーブルに追加して、今度は移行をロールバックしたいとします。理想的には、私はdownメソッドを書いて、列に一意の制約を再度追加しますが、テーブルに重複データが含まれるため、ロールバックは行われません。 私の質問は -マイグレーションファイル(knex.js)の機能を書き留める方法

  • ですこのような状況でどうしたらいいですか?
  • downの移行機能の記述方法は?
  • このような状況でdown機能をブランクにしておくことはできますか?

ありがとうございます。

+0

「up」にデータを挿入しないでください。データの挿入は 'seeding'に関連しています。 –

+0

@FazalRasel彼は、行の追加が移行ファイルの一部であるとは言わなかった。シードファイルは通常、繰り返し実行されるタスクや一度だけ実行されるタスクの移行に使用されます。 –

+0

@FazalRaselはい、Mikaelが言ったように、私は 'up'にデータを挿入していません –

答えて

1

私は通常、関数を書き留めておらず、空のままにしています。

移行をロールバックすることはありません。以前のDB状態にしたい場合は、バックアップから全体のDBを復元するだけです。

一意の制約を戻したい場合は、重複する行を修正して一意の制約を戻す別の上位の移行を書きます。

私は、多くの人がテストの間にDBをリセットするためにロールバックを使用していることを知っていますが、それはそれを行うには本当に遅い方法です。

+0

あなたが言ったように_fixes duplicates_の別の移行を書くでしょう。移行時に重複をどのように修正しますか?以前のデータに対して「ソフト削除」を実行し、それをデータベースに保存して一意制約を追加したい場合はどうすればよいですか? –

+0

@HarshalGangurdeあなたにとって最良の方法が何であるかを選択できます。完全なユニークなインデックスではなく、部分的にユニークなインデックスを作成することができます。これにより、ソフト削除された行は無視されます(アーカイブされた行でこれを行います)。他の方法は、ソフト削除されたデータを他のテーブルに移動するか、ソフト削除された行内のデータを変更して、制約が失敗しないようにすることです。アプリケーションに依存して、それに対する正解はありません。 –

関連する問題