@@ -65,6 +65,8 @@ CREATE TABLE IF NOT EXISTS public.snapshot
65
65
PRIMARY KEY (persistence_id, sequence_number)
66
66
);
67
67
68
+ DROP TRIGGER IF EXISTS trig_check_persistence_id_max_sequence_number ON public .journal_persistence_ids ;
69
+ DROP FUNCTION IF EXISTS public .check_persistence_id_max_sequence_number ();
68
70
DROP TRIGGER IF EXISTS trig_update_journal_persistence_ids ON public .journal ;
69
71
DROP FUNCTION IF EXISTS public .update_journal_persistence_ids ();
70
72
DROP TABLE IF EXISTS public .journal_persistence_ids ;
85
87
VALUES (NEW .persistence_id , NEW .sequence_number , NEW .ordering , NEW .ordering )
86
88
ON CONFLICT (persistence_id) DO UPDATE
87
89
SET
88
- max_sequence_number = GREATEST( public . journal_persistence_ids .max_sequence_number, NEW .sequence_number ) ,
89
- max_ordering = GREATEST( public . journal_persistence_ids .max_ordering, NEW .ordering ) ,
90
+ max_sequence_number = NEW .sequence_number ,
91
+ max_ordering = NEW .ordering ,
90
92
min_ordering = LEAST(public .journal_persistence_ids .min_ordering, NEW .ordering );
91
93
92
94
RETURN NEW;
@@ -98,3 +100,22 @@ CREATE TRIGGER trig_update_journal_persistence_ids
98
100
AFTER INSERT ON public .journal
99
101
FOR EACH ROW
100
102
EXECUTE PROCEDURE public .update_journal_persistence_ids ();
103
+
104
+ CREATE OR REPLACE FUNCTION public .check_persistence_id_max_sequence_number() RETURNS TRIGGER AS
105
+ $$
106
+ DECLARE
107
+ BEGIN
108
+ IF NEW .max_sequence_number <= OLD .max_sequence_number THEN
109
+ RAISE EXCEPTION ' New max_sequence_number not higher than previous value' ;
110
+ END IF;
111
+
112
+ RETURN NEW;
113
+ END;
114
+ $$
115
+ LANGUAGE plpgsql;
116
+
117
+
118
+ CREATE TRIGGER trig_check_persistence_id_max_sequence_number
119
+ BEFORE UPDATE ON public .journal_persistence_ids
120
+ FOR EACH ROW
121
+ EXECUTE PROCEDURE public .check_persistence_id_max_sequence_number ();
0 commit comments