fix: updated_at set to null on insert
before it was being set to current_timestamp which was a bug
This commit is contained in:
parent
b2af414cfb
commit
388dc63a12
1 changed files with 35 additions and 0 deletions
|
|
@ -0,0 +1,35 @@
|
||||||
|
--- Dropping trigger to prevent them from being called while migrating data
|
||||||
|
drop trigger if exists handle_message_timestamps on message;
|
||||||
|
|
||||||
|
--- Migrate data
|
||||||
|
update message
|
||||||
|
set updated_at = null
|
||||||
|
where created_at = updated_at
|
||||||
|
and updated_at is not null;
|
||||||
|
|
||||||
|
--- Replace trigger handler
|
||||||
|
create or replace function handle_timestamps()
|
||||||
|
returns trigger as
|
||||||
|
$$
|
||||||
|
begin
|
||||||
|
if lower(tg_op) = 'insert' then
|
||||||
|
new.created_at = coalesce(new.created_at, current_timestamp);
|
||||||
|
new.updated_at = null;
|
||||||
|
elsif lower(tg_op) = 'update' then
|
||||||
|
if new.created_at is distinct from old.created_at then
|
||||||
|
raise exception 'Direct modification of created_at is not allowed.';
|
||||||
|
end if;
|
||||||
|
|
||||||
|
new.updated_at = current_timestamp;
|
||||||
|
end if;
|
||||||
|
|
||||||
|
return new;
|
||||||
|
end;
|
||||||
|
$$ language plpgsql;
|
||||||
|
|
||||||
|
--- Reinsert trigger
|
||||||
|
create trigger handle_message_timestamps
|
||||||
|
before insert or update
|
||||||
|
on message
|
||||||
|
for each row
|
||||||
|
execute function handle_timestamps();
|
||||||
Loading…
Add table
Add a link
Reference in a new issue