Я сейчас пишу пользовательскую функцию upsert для конкретного c варианта использования таблицы красного смещения. В своих документах AWS предлагает два метода , на которые я черпаю вдохновение. Вот что я хочу сделать. sh:
- Вставлять любые новые строки в существующую таблицу, но только если они еще не существуют.
- В этом нет необходимости для удаления или изменения существующей строки (для моего случая использования)
До сих пор я придумал два разных способа сделать это, но мне интересно, какие компромиссы для каждого могут быть
- с использованием запроса
EXCEPT
для вставки только новых строк из временной таблицы:
insert into persisted_table (
select *
from temp_table
except
select *
from persisted_table
);
сохранять результаты запроса
UNION ALL
во временной таблице с сохраняемой таблицей и использовать это как постоянную таблицу
insert into new_table (
select *
from temp_table
union
select *
from persisted_table
);
alter table persisted_table rename to old_perisisted_table_marked_for_deletion;
alter table new_table rename to persisted_table;
Я знаю, что объединение выполняется медленно и обычно не рекомендуется для массовых / крупномасштабных операций. Но есть ли какие-либо аргументы, которые могут повлиять на это решение?