Set up automatic updating of tables with updated columns
Finally: a legitimate use for triggers!
Many of your table definitions likely have these two columns:
create table users ( name text not null, -- ... other columns ... created timestamp with time zone not null default now(), updated timestamp with time zone not null default now()); create table customers ( name text not null, -- ... other columns ... created timestamp with time zone not null default now(), updated timestamp with time zone not null default now());
But how to you ensure that every update to a row in this table actually updates the "updated" column? A trigger, that's how:
-- Define this stored procedure once create or replace function set_updated_column_to_now() returns trigger as $body$ begin NEW.updated = now(); return NEW; -- allow the row through for the actual update end; $body$ language plpgsql volatile; -- Define a trigger for each table that has an updated column -- (The PostgreSQL docs say that multiple triggers on the same -- table are executed in alphabetical order, so these are named -- with a leading aaa_ on the assumption that we want them to -- set the updated column before other triggers operate on the -- row.) create trigger aaa_set_users_updated_column_to_now before update on users for each row when (NEW.updated = OLD.updated) execute procedure set_updated_column_to_now(); create trigger aaa_set_customers_updated_column_to_now before update on customers for each row when (NEW.updated = OLD.updated) execute procedure set_updated_column_to_now();