Операция upsert в PostgreSQL с использованием ON CONFLICT позволяет добавлять новые записи в таблицу или обновлять существующие, если они уже есть, за одну команду. www.geeksforgeeks.org
Процесс работы: neon.com
- Определение источника конфликта. neon.com Обычно это уникальное ограничение или уникальный индекс. neon.com www.geeksforgeeks.org Если вставляемые данные нарушают это ограничение, возникает конфликт. neon.com
- Выбор действия при конфликте. neon.com www.prisma.io Есть два варианта:
- DO NOTHING. neon.com www.prisma.io Указывает PostgreSQL оставить конфликтующую запись без изменений. www.prisma.io Это действие не вносит изменений, но подавляет ошибку, которая обычно возникает при попытке вставить строку, нарушающую условие. www.prisma.io
- DO UPDATE. neon.com www.prisma.io Указывает PostgreSQL обновить строку, которая уже есть в таблице. www.prisma.io Для этого используется специальная виртуальная таблица EXCLUDED, которая содержит значения, предложенные в оригинальной команде INSERT (они конфликтовали с существующими значениями таблицы). www.prisma.io
- Определение столбцов и значений для обновления. neon.com Можно использовать новые значения или ссылаться на значения, которые пытались вставить, с помощью ключевого слова EXCLUDED. neon.com
Использование ON CONFLICT (upsert) позволяет сократить время выполнения операций, так как выполняется за один запрос, и обеспечивает атомарность, то есть операция рассматривается как единое целое, и гарантируется либо полный успех, либо полный провал. codedamn.com