method_missing(*)

Rust sqlxで'ALTER TABLE'が動作しない問題への対応

2022-09-11 (Sun)

概要

Rustでsqlxを使っていた際に、下記のコードだと./migrationsディレクトリに存在するALTER TABLEを用いたSQLファイルが実行されなかったが、なんとか動作するようにはなったので、備忘録としてとどめておく。

ちなみにsqlx migrate runコマンドだと動作した。

sqlx::migrate!()
  .run(&pool)
  .await
  .expect("Cannot run migration");
ALTER TABLE questions ADD COLUMN account_id SERIAL;

開発環境

  • PostgreSQL: 13
  • Rust: 1.62

回避策

migrate!マクロの引数に、migrationsディレクトリのパスを指定すると動作するようになった。

sqlx::migrate!("./migrations")
  .run(&pool)
  .await
  .expect("Cannot run migration");

公式ドキュメントにもある通り、デフォルトでのパスが./migrationsになっているので、本来は指定しなくても良いはずだが、試しに追加してみたところ動いた。

原因はまた時間があるときに調査して、PRを投げておく。