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

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

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

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

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

[pastacode lang=»sql» manual=»insert%20into%20products%20values%20(111%2C%20’new%20product%20name’%2C%2010)%20%0Aon%20conflict%20on%20constraint%20products_pkey%20do%20update%20%0Aset%20product_name%20%3D%20’new%20product%20name’%2C%20amount_in_stock%20%3D%2010%3B» message=»» highlight=»» provider=»manual»/]

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

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

[pastacode lang=»sql» manual=»insert%20into%20products%20values%20(111%2C%20’new%20product%20name’%2C%2010)%20%0Aon%20conflict%20on%20constraint%20products_pkey%20do%20update%20%0Aset%20product_name%20%3D%20excluded.product_name%2C%20amount_in_stock%20%3D%20excluded.amount_in_stock%3B» message=»» highlight=»» provider=»manual»/]

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

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