После миграции схемы мне нужно убедиться, что все значения в таблицах старой схемы были успешно скопированы в правильные таблицы новой схемы. Из-за того, что схемы имеют разную архитектуру (разные таблицы с разными столбцами и разные отношения друг с другом), это занимает вечность.
У меня уже есть этот метод, который должен дать вам основы c обзор задачи:
for rec1 in(
select r1.id as r_id, r1.year as r_year...
f1.id as f_id, f1.year as f_year...
e1.id as e_id, e1.year as e_year...
a1.id as a_id, a1.year as a_year...
...
from schema1.table_r r1
join schema1.table_f f1 on...
join schema1.table_e e1 on...
join schema1.table_a a1 on...
...
where r1.id = ...
) loop
if exists (
select gbt.id, gbt.ident, gbt.foo...
gkp.bar, gkp.baz...
from schema2.table_1 gbt
join schema2.table_2 gkp on ...
where
rec1.r_year is not distinct from gbt.ident
and rec1.f_id is not distinct from gkp.baz
and rec1.a_year is not distinct from gbt.id
and...
...
)then //do stuff
)end if;
)end loop;
Я упустил много столбцов, псевдонимов, объединений и "не отличается от", чтобы упростить обзор сценария.
Хотя этот метод работает Это, пожалуй, лучший пример того, как этого не делать, если иметь в виду производительность.
Как бы вы улучшили производительность для этой задачи? Я думал о создании двух представлений, по одному для каждой схемы, "реконструкции" таблиц, чтобы они были одинаковыми, и хешировании строк для сравнения хешей между двумя представлениями. Это был бы лучший подход?
Спасибо!