![](https://habrastorage.org/r/w1560/getpro/habr/upload_files/148/0ff/144/1480ff144166769bc08b9c7eea6f7e55.png)
С выходом PostgreSQL 15 мы застали появление долгожданной команды MERGE
, которая позволяет реализовывать эффективные способы синхронизации обновлений.
Суть MERGE
заключается в ее универсальности: она позволяет объединить операции INSERT
, UPDATE
и DELETE
в одном запросе, автоматически выбирая нужное действие в зависимости от того, существует ли соответствующая запись в целевой таблице.
Вместо нескольких отдельных запросов INSERT
, UPDATE
, DELETE
MERGE
сокращает накладные расходы на сетевой трафик и уменьшает количество обращений к диску. MERGE
облегчает реализацию шаблонов SCD и других сложных сценариев управления данными.
MERGE
в PostgreSQL работает с соблюдением строгих стандартов SQL, обеспечивая совместимость и переносимость кода. Также PostgreSQL обрабатывает конфликты на уровне строк, позволяя тонко настраивать логику обработки данных с использованием условий WHEN MATCHED
и WHEN NOT MATCHED
.
Сравнивая с предшествующим подходом INSERT ON CONFLICT
, MERGE
предлагает больше возможностей для оптимизации и управления данными. INSERT ON CONFLICT
был ориентирован преимущественно на обработку конфликтов при вставке, в то время как MERGE
расширяет этот функционал.