Применение оператора MERGE в PostgreSQL
Рассмотрим, как использовать оператор MERGE в PostgreSQL для эффективного выполнения операций INSERT, UPDATE или DELETE строк в таблице
11К открытий18К показов
Оператор MERGE – это мощный инструмент, который можно использовать для выполнения условных операций INSERT, UPDATE или DELETE строк в таблице. Он был введен в стандарте SQL:2003 и расширен в стандарте SQL:2008.
В этой статье мы рассмотрим, как использовать оператор MERGE в PostgreSQL для эффективного выполнения этих операций.
MERGE похож на оператор UPSERT в других диалектах SQL, но имеет ряд преимуществ, включая:
- Он более эффективен, поскольку выполняет только необходимые операции для каждой строки.
- Он атомарный, поскольку либо успешно выполняется, либо завершается неудачей целиком.
- Он более гибкий, поскольку позволяет указывать более сложные условия.
В PostgreSQL до версии 15 для условных операций INSERT, UPDATE и DELETE можно было использовать оператор INSERT INTO ... ON CONFLICT [ conflict_target ] conflict_action. Однако, начиная с версии 15, появилась возможность использовать все преимущества оператора MERGE.
Синтаксис оператора MERGE выглядит следующим образом:
Здесь target_table – это таблица, которую нужно обновить или в которую нужно вставить строки.
source_table – это таблица, содержащая данные, которые будут использоваться для обновления или вставки строк в target_table.
Условие – это логическое выражение, используемое для определения, нужно ли обновлять или вставлять строку из source_table.
update_statement – это SQL-запрос, используемый для обновления строк в target_table.
insert_statement – это SQL-запрос, используемый для вставки строк в target_table.
Вот пример оператора MERGE, который обновляет таблицу customers, используя таблицу leads. Обе таблицы имеют поле email, поэтому нам нужно добавлять только те строки из leads, email которых не существует в таблице customers:
Для каждой строки, для которой не нет соответствия, будет выполнен запрос на вставку.
Этот запрос эквивалентен следующему запросу UPSERT:
Но, если мы посмотрим на результаты, мы увидим преимущество оператора MERGE: он не увеличивает поле id в случае, если запись уже существует. Здесь можно выполнить тест SQL.
Давайте попробуем выполнить более сложную задачу. Теперь мы добавим новые записи в таблицу customers с новыми электронными адресами и обновим имя для уже существующих записей.
Здесь можно выполнить SQL-запрос.
А в последнем сценарии мы добавим записи в таблицу customers с отсутствующими электронными адресами, обновим имя, если дата создания клиента меньше, чем соответствующая дата в leads, и удалим другие записи:
Таким образом мы познакомились с командой MERGE, которая позволяет выполнять условные операции INSERT, UPDATE или DELETE на строках таблицы. Этот инструмент более эффективен, атомарен и гибок, чем другие SQL-диалекты.
Благодаря MERGE можно выполнять более сложные задачи, связанные с обновлением и вставкой данных в таблицы.
Если Вам понравилась статья, Вы можете поддержать автора.
11К открытий18К показов



