普段思ったことや、雑記。

Menu & Search

sequelize-cliで「ERROR: null value in column “createdAt” violates not-null constraint」が出たときの対処

2018年4月20日

※sequelize-cli v4.0.0, sequelize v4.37.6での出来事です。

公式チュートリアルのコマンドですら、マイグレーション時に「ERROR: null value in column “createdAt” violates not-null constraint」と出るような状況

sequelize-cliに慣れておらず、色々と模索しながらいじっていた。おそらく、最初からではなく途中からだと思われるが、いつしかsequelize-cliにてモデルを作成してから、sequelize db:migrateを実行するとERROR: null value in column "createdAt" violates not-null constraintと実行時に必ず出てしまい、マイグレーションがうまくいかなくなってしまった。

 

DBのSequelizeMetaとSequelizeMetaBackupテーブルを削除し、マイグレーションをやりなおすことで解決

解決策は見出しの通りで、そのままである。SequelizeMetaとSequelizeMetaBackupテーブルを削除することで、特にモデルに変更は加えていないが、マイグレーション時にERROR: null value in column "createdAt" violates not-null constraintのエラーが出ることは一切なくなった。

結局のところ、解決策が調べても分からなかったので、DBをドロップするか…と、その前に明らかにsequelize-cliが管理用に使ってそうなテーブル2つを削除してみるかーとやってみたら、たまたまやってみたら現象が解消した。
こうなった理由として、そもそも自分のRails力(?)が足りなかったのか(※SequelizeはRailsのDB環境を目指しているものと思ってる)、なんなのかは分からないが、sequelize-cliでDBマイグレーションに慣れておらず、テーブルの作成をやり直すのにsequelize db:migrate:undoを実行せずに、手動でテーブルを消したり、sequelize-cliを中途半端に使っていた。

こういったマイグレーションツールは、基本的にはDB操作のラッパーとなるコマンドが用意されているものなら、そこに乗っかりきるのが大切なようだ。そのルートから逸脱すると、このようなよく分からないエラーに見舞われることもある(Rails力が高い人は、この手の常識を心得ており、はなから余裕で乗り切ると信じている)。

 

ちなみに、db:seedsを実行したときに出る場合

sequelize db:seedsを実行した際にも同様のエラーに遭遇した。この場合はsequelize-cliの仕様なのか、バグなのか不明だが(たぶんバグ)、createdAtとupdatedAtカラムは、通常sequelize側で自動的に値が書き込まれるが、sequelize-cliではなぜか書き込まれない。その場合、対象のseedファイルにて、下記のようにcreatedAtとupdatedAtカラムに明示的に時刻を入れてやればよい。


 

追記

トピック的にずれるが、sequelize deprecated String based operators are now deprecated. Please use Symbol based operators for better security, read more at http://docs.sequelizejs.com/manual/tutorial/querying.html#operators node_modules/sequelize/lib/sequelize.js:242:13という警告がsequelize-cliのマイグレーション時に出るが、これはsequelize-cliの内部処理でsequelizeを使っていて、sequelizeの警告がたまたま出ているものと思われる。マイグレーション対象のモデルの書式を見直しても、おかしな箇所はなかった。

Article Tags
mmiyauchi

プログラムを書きながらTranceを聴くのが良いですね。みなさんも聴いたほうがいいですよ、Trance。EDMよりハードトランスでしょ。

Related article

NativeScriptの調査とReact Nativeとの比較

ちょっとした勉強会で…

React Native開発の良い点と注意点まとめ

React Native開発の良い点と注意点まとめ

React Nati…

React NativeのHTTPリクエストにはfetchよりaxiosを使ったほうが安定しそう

※この記事はReac…

Discussion about this post

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Type your search keyword, and press enter to search
%d人のブロガーが「いいね」をつけました。