PostgreSQL, Базы данных

Insert … on conflict do update — Обновление записи при вставке, если возникает нарушение ограничения

Как без предварительной проверки существования записи по первичному ключу, сразу вставлять ее, а при возникновения конфликта — просто обновить? И все за раз. Необходимо воспользоваться предложением on conflict … do …

Подробней об этом расскажет страница документации.

Я покажу пример, как при возникновении нарушения уникальности первичного ключа обновить данные.

insert into products values (111, 'new product name', 10) 
on conflict on constraint products_pkey do update 
set product_name = 'new product name', amount_in_stock = 10;

Где таблица products содержит следующие поля: product_id, product_name, amount_in_stock. products_pkey — ограничение первичного ключа. В итоге, если вставляется запись с уже имеющимся в таблице product_id = 111, она будет просто обновлена с указанными значениями.

Для обновления записи теми же значениями, что указываются в перечне values(), необходимо использовать обращение excluded:

insert into products values (111, 'new product name', 10) 
on conflict on constraint products_pkey do update 
set product_name = excluded.product_name, amount_in_stock = excluded.amount_in_stock;

Оставьте своё мнение...

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.