-
Notifications
You must be signed in to change notification settings - Fork 1
add option fromdb #12
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
usecase: after failed deploy. but ddl is non transaction. then use this option for force migrate.
目的部分の文章がよくわかりませんでした。なんとなく察せますが、ここはハッキリさせておいたほうがよさそうです。さらにオプション名が"fromdb"なので「データベースから」なにかをするのはわかりますが、何をするのかよくわからない印象です。 わかりにくい点の例のひとつとして、データベースと任意のスキーマの差分を出すのか?それとも任意のスキーマとデータベースの差分を出すのか?がfromdbというオプション名この説明だけではわからないです。目的がハッキリしてれば意見をする方としてもオプション名の提案等ができますが、ちょっとこの説明だとなんとも言えない感じです。 ということで、上記のような細かい点以前に大枠の目的をしっかりPRに書いていただく方が良い気がします。 |
懸念点以降の処理がどのぐらい大きくなるかで分けるか、サブコマンド式にするか、みたいなこともあるかもしれないですね。これの場合はこっちのオプションは使われないみたいなのが、もし増えてくるとちょっとわかりづらそうかなというきも。 失敗した時に db と差分が出せる機能自体は便利そうで良さそうな気がしています。 |
PRのdescription更新しました。 実際、手元でslowlogをみながらINDEXの調整をするみたいなことがあって、調整が終わったらschemaを修正してこれと同じような仕組みで元に戻すということをしていました。 |
直感的な反応としては
schemalexが差分を出すツールで、git-schemalexがgitに保存してある差分を出して適用するツールなんだから、schemalexのほうでファイル vs ファイルとかじゃなくて、ファイル vs DBを出せるようにするほうが正しいのかも? @soh335 どうでしょう? |
例えば、こう
|
確かに
このオプションが無くても、これでいけますよーくらいで良い気もしますのでおまかせします。 |
gitに登録されてるファイルも読み込めるようにしたらすげぇ便利になってきた… gitに登録されてるファイル vs 適当なファイル
gitに登録されてるファイル vs MySQLからひっぱてきたスキーマ
|
こうなってくると、git-schemalexほどごつごつしたものはいらなくなって、schemalexの簡単なラッパーがあるとなんでもできるようになりそう。 基本、
さえできればDDLの差分は適用できるわけだから、git-schemalex的なツールが提供するのはもうバージョンテーブルの管理くらいになりますよね |
stdin対応もつけたので、これもできるようになりました(現在デプロイされてるものと、ローカルのファイルの差分を出す)
|
mysql の現在を読み込めるようにするなら
だと思っていたので、schemalex に寄せるでいいかなぁと思ってます。 |
失敗の場合は、ロールバック手順があってもいいかもですねぇ。例えば、「現在のバージョン」だけを保存するのではなく、ヒストリーを保存しておくとかしてロールバック可能にするとか。 でも、
とりあえずこれがよさそうな気がします。 |
そうですね。そういう機能を将来的に? git-schemalex で schemalex をラップしつつ提供していくが良さそうな気がします。 |
とりあえず schemalex側レビューおねしゃす! |
ref schemalex/schemalex#33
( sorry in japanese )
目的
データベースをあるべき状態に強制的に変更すること
その為、
-schema
オプションが示すsqlのコミット間の差分ではなく、実際のデータベースとあるべきスキーマとの差分を扱えるようにすることなぜ必要か
例えば、以下のようなケースでのリカバリを想定しています。
DDLはトランザクションが効かないため、一度migrateに失敗すると次回以降already existsなどが発生してしまう。
この場合もエラーが発生してしまったり、成功したとしても
-schama
にcreate table文を追加せず、手元のコードとDBだけを更新してしまったなどのケースも想定されます。懸念点
versionteable以外のSchama管理していないテーブルを同じデータベースに入れている場合にdropしてしまうので、ignore tables みたいなオプションを用意したほうが良いでしょうか?
そもそも、git-schamalex-recovery みたいな別ツールにしたほうが良いでしょうか?
外部キー制約を使っていて、暗黙にINDEXが作成された時に、手書きのSQLとshow create tableで暗黙的に作成されたINDEXがdiffとなり、それがDROP INDEXできないという問題があったので外部キーを設定している場合 schemalex/schemalex#33 だけでは足りなそうでした。
https://dev.mysql.com/doc/refman/5.6/ja/create-table-foreign-keys.html
この件についてはschemalexに別途prしようと思います。