はじめに
RustでDBといったらDieselですが、色々ややこしいですよね、こいつ。
なので自分なりのルールというか、Tipsをまとめようと思います。
大層なタイトルつけといてなんですが、これ全然ベストプラクティスじゃないです。
なので、あなたのプラクティスを教えてください!
都度更新していきたいと思います。
特定の環境でしか使えないようなmigration codeは書かない
たとえPostgresを使うことが決まっていたとしても、テストなどで SQLite が活躍するので。
例えば、以下のようなSQLはよくない
CREATE TABLE posts (
id SERIAL PRIMARY KEY
)
SERIALはPosgresでしか使えない。
SERIALの代わりにINTEGERを使う。
必要なら AUTO INCREMENTつける。
CREATE TABLE posts (
id INTEGER PRIMARY KEY
)
最初はSQLite環境でデバッグを行う
SQLのデバッグとか。
前まではDockerで立てたりしてたんだけど、こっちの方が早い。
$ diesel setup --database-url db.sqlite3
$ diesel migration generate --database-url db.sqlite3
$ diesel migration run --database-url db.sqlite3
$ diesel print-schema --database-url db.sqlite3
テストではSQLiteのin memory版を使う
SqliteConnection::establish(":memory:").unwrap()
便利
diesel.tomlファイルを使う
diesel setup
を行うと、デフォルトのdiesel.toml
ファイルができあがる。
今の所はprint_schema
セクションしかないみたいだけど。
file
フィールドは絶対使う。
これは、$ diesel print-schema
のたびにそこにschema情報が書かれるというもの。
Migrationをプログラムで行うときはdiesel_migrations
を使う
テストのときとかね。
そもそも migration をプログラム上で行うのはアンチパターンなのだろうか。
教えて欲しい。