0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SequelizeのonUpdateはPostgreSQLで機能しない

Posted at

今回、罠にハマった問題

データベースがPostgreSQL、ORMにsequelizeを使った環境で、migrate機能を使ってテーブルを作成しました。
データの更新日時を記録したかったので、updated_atのカラムを追加したのですが、UPDATE文を発行してもupdated_atは更新されませんでした。

migration.js
updated_at: {
    allowNull: false,
    type: Sequelize.DATE,
    defaultValue: Sequelize.literal('CURRENT_TIMESTAMP'),
    onUpdate: Sequelize.literal('CURRENT_TIMESTAMP')
}

(onUpdateがあるので日時は自動更新されそうな雰囲気ですが)

原因

PostgreSQLには、データの変更時に日時を更新する機能が備わっていない為、Sequelizeのmigrationファイルで設定してもデータベースには何も反映されていないと考えられます。

解決策

SQLでUPDATE文を発行する際に、手動でupdate_atの更新を行いました。
CURRENT_TIMESTAMPで現在時刻が取得できます。

sample.sql
UPDATE users SET name = taro, updated_at = CURRENT_TIMESTAMP WHERE id = 1

PostgreSQLのトリガー機能を使って実装すると、データベース側で自動更新できるようですが、今回はアプリ側が発行するSQLで対処しました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?