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

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カラムに明示的に時刻を入れてやればよい。

 up: (queryInterface, Sequelize) => {
    return queryInterface.bulkInsert('members', [{
      first_name: 'Masaki',
      last_name: 'Miyauchi',
      email: '[email protected]',
      password: 'xxxyyyzzz',
      createdAt: new Date(),
      updatedAt: new Date(),
    }], {});
  },

 

追記

トピック的にずれるが、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

Redux(react-redux)における適切な配列要素の更新

2021年8月23日…

CloudFlareの『SSL/TLS 暗号化モード(HTTPS通信設定)』を使用したとき、『ERR SSL VERSION OR CIPHER MISMATCH』のエラーでChromeで発生し、接続できない場合の対処

英語の記事は見当たっ…

Dart(Flutter)についての所見

Dart(Flutter)についての所見

第一印象では、クロス…

Discussion about this post

コメントを残す

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Type your search keyword, and press enter to search