Sep 10, 2018
Let Postgres generate thouse updated_at timestamps for you
Various ORMs (like Rails’ ActiveRecord, Sequelize, etc) offer you the option of adding timestamps for the moment a record is created and updated. The created stamp is easy to do by simply giving it a default value of NOW()
, but an updated_at
stamp needs to change every time the row does.
But in a recent quest to simplify my projects, I needed an updated_at
stamp but did not want to go through the trouble of manually writing it on every update. So I settled on doing the following in my Postgres database:
CREATE OR REPLACE FUNCTION updated_at_restamp_column()
RETURNS TRIGGER AS $$
BEGIN
IF row(NEW.*) IS DISTINCT FROM row(OLD.*) THEN
NEW.updated_at = NOW();
RETURN NEW;
ELSE
RETURN OLD;
END IF;
END;
$$ language 'plpgsql';