From 388dc63a1215cdc93309b7b2b80b65a00ea9446b Mon Sep 17 00:00:00 2001 From: Dokkae6949 Date: Sun, 14 Dec 2025 01:00:27 +0100 Subject: [PATCH] fix: updated_at set to null on insert before it was being set to current_timestamp which was a bug --- .../V003__fix_updated_at_insert_trigger.sql | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/resources/db/migration/V003__fix_updated_at_insert_trigger.sql diff --git a/src/main/resources/db/migration/V003__fix_updated_at_insert_trigger.sql b/src/main/resources/db/migration/V003__fix_updated_at_insert_trigger.sql new file mode 100644 index 0000000..a731f95 --- /dev/null +++ b/src/main/resources/db/migration/V003__fix_updated_at_insert_trigger.sql @@ -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(); \ No newline at end of file