Skip to content

Commit

Permalink
Another attempt to fix the case when a table is moved to another grou…
Browse files Browse the repository at this point in the history
…p and then removed. The obsolete log tables drop step erroneously dropped log tables always linked to other groups.
  • Loading branch information
beaud76 committed Sep 1, 2019
1 parent ccfd410 commit ac81e4f
Show file tree
Hide file tree
Showing 17 changed files with 398 additions and 334 deletions.
10 changes: 6 additions & 4 deletions sql/emaj--3.1.0--devel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3901,13 +3901,14 @@ $_delete_before_mark_group$
SELECT time_last_emaj_gid, mark_time_id INTO v_markGlobalSeq, v_markTimeId
FROM emaj.emaj_mark, emaj.emaj_time_stamp
WHERE mark_time_id = time_id AND mark_group = v_groupName AND mark_name = v_mark;
-- drop obsolete old log tables (whose end time stamp is older than the new first mark time stamp)
-- drop obsolete old log tables (whose end time stamp is older than the new first mark time stamp or which are linked to other groups)
FOR r_rel IN
SELECT DISTINCT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_group = v_groupName AND rel_kind = 'r' AND upper(rel_time_range) <= v_markTimeId
EXCEPT
SELECT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_kind = 'r' AND (upper(rel_time_range) > v_markTimeId OR upper_inf(rel_time_range))
WHERE rel_kind = 'r'
AND (upper(rel_time_range) > v_markTimeId OR upper_inf(rel_time_range) OR rel_group <> v_groupName)
ORDER BY 1,2
LOOP
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE',
Expand Down Expand Up @@ -5254,13 +5255,14 @@ $_reset_groups$
DELETE FROM emaj.emaj_sequence USING emaj.emaj_relation
WHERE rel_schema = sequ_schema AND rel_tblseq = sequ_name AND
rel_group = ANY (v_groupNames) AND rel_kind = 'S';
-- drop obsolete emaj objects for removed tables
-- drop obsolete log tables (but keep those linked to other groups)
FOR r_rel IN
SELECT DISTINCT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_group = ANY (v_groupNames) AND rel_kind = 'r' AND NOT upper_inf(rel_time_range)
EXCEPT
SELECT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_kind = 'r' AND upper_inf(rel_time_range)
WHERE rel_kind = 'r'
AND (upper_inf(rel_time_range) OR NOT rel_group = ANY (v_groupNames))
ORDER BY 1,2
LOOP
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE',
Expand Down
10 changes: 6 additions & 4 deletions sql/emaj--devel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5904,13 +5904,14 @@ $_delete_before_mark_group$
SELECT time_last_emaj_gid, mark_time_id INTO v_markGlobalSeq, v_markTimeId
FROM emaj.emaj_mark, emaj.emaj_time_stamp
WHERE mark_time_id = time_id AND mark_group = v_groupName AND mark_name = v_mark;
-- drop obsolete old log tables (whose end time stamp is older than the new first mark time stamp)
-- drop obsolete old log tables (whose end time stamp is older than the new first mark time stamp or which are linked to other groups)
FOR r_rel IN
SELECT DISTINCT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_group = v_groupName AND rel_kind = 'r' AND upper(rel_time_range) <= v_markTimeId
EXCEPT
SELECT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_kind = 'r' AND (upper(rel_time_range) > v_markTimeId OR upper_inf(rel_time_range))
WHERE rel_kind = 'r'
AND (upper(rel_time_range) > v_markTimeId OR upper_inf(rel_time_range) OR rel_group <> v_groupName)
ORDER BY 1,2
LOOP
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE',
Expand Down Expand Up @@ -7889,13 +7890,14 @@ $_reset_groups$
DELETE FROM emaj.emaj_sequence USING emaj.emaj_relation
WHERE rel_schema = sequ_schema AND rel_tblseq = sequ_name AND
rel_group = ANY (v_groupNames) AND rel_kind = 'S';
-- drop obsolete emaj objects for removed tables
-- drop obsolete log tables (but keep those linked to other groups)
FOR r_rel IN
SELECT DISTINCT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_group = ANY (v_groupNames) AND rel_kind = 'r' AND NOT upper_inf(rel_time_range)
EXCEPT
SELECT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_kind = 'r' AND upper_inf(rel_time_range)
WHERE rel_kind = 'r'
AND (upper_inf(rel_time_range) OR NOT rel_group = ANY (v_groupNames))
ORDER BY 1,2
LOOP
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE',
Expand Down
10 changes: 6 additions & 4 deletions sql/emaj-devel.sql
Original file line number Diff line number Diff line change
Expand Up @@ -5911,13 +5911,14 @@ $_delete_before_mark_group$
SELECT time_last_emaj_gid, mark_time_id INTO v_markGlobalSeq, v_markTimeId
FROM emaj.emaj_mark, emaj.emaj_time_stamp
WHERE mark_time_id = time_id AND mark_group = v_groupName AND mark_name = v_mark;
-- drop obsolete old log tables (whose end time stamp is older than the new first mark time stamp)
-- drop obsolete old log tables (whose end time stamp is older than the new first mark time stamp or which are linked to other groups)
FOR r_rel IN
SELECT DISTINCT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_group = v_groupName AND rel_kind = 'r' AND upper(rel_time_range) <= v_markTimeId
EXCEPT
SELECT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_kind = 'r' AND (upper(rel_time_range) > v_markTimeId OR upper_inf(rel_time_range))
WHERE rel_kind = 'r'
AND (upper(rel_time_range) > v_markTimeId OR upper_inf(rel_time_range) OR rel_group <> v_groupName)
ORDER BY 1,2
LOOP
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE',
Expand Down Expand Up @@ -7896,13 +7897,14 @@ $_reset_groups$
DELETE FROM emaj.emaj_sequence USING emaj.emaj_relation
WHERE rel_schema = sequ_schema AND rel_tblseq = sequ_name AND
rel_group = ANY (v_groupNames) AND rel_kind = 'S';
-- drop obsolete emaj objects for removed tables
-- drop obsolete log tables (but keep those linked to other groups)
FOR r_rel IN
SELECT DISTINCT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_group = ANY (v_groupNames) AND rel_kind = 'r' AND NOT upper_inf(rel_time_range)
EXCEPT
SELECT rel_log_schema, rel_log_table FROM emaj.emaj_relation
WHERE rel_kind = 'r' AND upper_inf(rel_time_range)
WHERE rel_kind = 'r'
AND (upper_inf(rel_time_range) OR NOT rel_group = ANY (v_groupNames))
ORDER BY 1,2
LOOP
EXECUTE format('DROP TABLE IF EXISTS %I.%I CASCADE',
Expand Down

0 comments on commit ac81e4f

Please sign in to comment.