Skip to content
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

DB schema evolution (version) management #194

Open
richardimaoka opened this issue Jan 4, 2017 · 4 comments
Open

DB schema evolution (version) management #194

richardimaoka opened this issue Jan 4, 2017 · 4 comments

Comments

@richardimaoka
Copy link
Collaborator

Using ALTER TABLE.

Currently octav.sql only has CREATE TABLE operations.

Look for common practices.

@richardimaoka
Copy link
Collaborator Author

From Slack 9:04AM 2017/01/04

[lestrrat] macopy GoのアプリのDBのスキーマ更新の管理、いつもどうやってるのか教えてくれませんか!差分DDLで管理してましたよね?
[macopy] 僕がやっていたのは github.com/mackee/genddl でDDL吐いてそれを github.com/typester/GitDDL で管理
[macopy] GitDDLをGo風に書いたけれどPerl
[macopy] GitDDLの中身はSQL::Translator::Diffです :smile:
[lestrrat] genddlはStruct → DDLです?
[macopy] yes ちなみに複合PKが扱えないという問題を現在抱えております。まあこれはいろいろアイディアはあるけれどもう使わなくなっちゃったのでやってない。。。
[lestrrat] Diffは、どの段階でかけるの?具体的には、二つの生きてるMySQLが必要?それともDDLを読み込んで差分?
[macopy] 生きているMySQLにはgit_ddl_versionというテーブルがあって
そこに1行だけデプロイされているDDLのバージョンがgitのコミットハッシュで入っています
[lestrrat] git のコミットハッシュか。なるほど。
[macopy] で、スキーマをデプロイするときにそのコミットハッシュと現在デプロイしようとしているコミットハッシュ間のDDLの差分を取る
[macopy] http://techblog.kayac.com/2016/12/19/134515 社内の他所のプロジェクトではpure goでこんなことをやっている様子
[lestrrat] なるほど。(理論的には)git checkout $old_hash, git checkout $new_hash して、その差分をとるんですね。ということはDDLを読み込んで解析してるわけか。
[macopy] yes
[lestrrat] schemlexなるほど。Diffの部分か
sqlmakerはreflectベースでgenddlと同じことやってます
Interface形式でスキーマ定義を色々書けるのがべんりというのが特徴
genddlは静的解析なのでtagとstructで全部やらないといけない・・・

@lestrrat
Copy link
Contributor

lestrrat commented Jan 6, 2017

あ、それについては今 soh335さんのschemalexに大改造を行っています。
https://github.com/lestrrat/schemalex

@richardimaoka
Copy link
Collaborator Author

https://builderscon.slack.com/archives/tech/p1483500962000138

こちらの現状なのですが、schemalex/schemalexの改造が終わって、DDLファイル2つからdiffを取ることは問題なくできる(もともと出来ていた)、で

[lestrrat] なるほど。(理論的には)git checkout $old_hash, git checkout $new_hash して、その差分をとるんですね。ということはDDLを読み込んで解析してるわけか

gitを使ってDDLのバージョン間diffをとりたいが、soh335/git-schemalexはgitのバイナリを使っているので、実行環境でgitコマンド自体のバージョン違う可能性があり、うれしくない、

というわけで、src-d/go-gitを使おうとしたら、gopkg.inがなんだかコケてて、ダウンロード出来ん…

が、なにはともあれsrc-d/go-gitは使うつもりである、っていう話であってます?

@lestrrat
Copy link
Contributor

うーん、コーディングスピードに自信があるならgoでガリガリ書くでもいいけど、とりあえず既存のツール使って動くところまでやってしまってもいいのでは?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants