Вставка или обновление записей
Если мы не знаем, существует ли запись, которую нужно обновить,
или её требуется добавить, удобно использовать оператор UPDATE OR INSERT
.
Его синтаксис:
UPDATE OR INSERT INTO target [(<column_list>)]
VALUES (<value_list>)
[MATCHING (<column_list>)]
[RETURNING <returning_list> [INTO <variables>]]
Что именно произойдёт, вставка или обновление, зависит от значений столбцов
в предложении MATCHING
, а в случае, если оно не указано, то от значений столбцов
первичного ключа. Если найдены записи, совпадающие с указанными значениями, то они
обновятся, а иначе будет добавлена новая запись.
Когда у таблицы нет первичного ключа, то обязательно надо указать MATCHING
.
Предложение RETURNING
используется так же как и в операторах UPDATE
или INSERT
.
Пример запроса:
UPDATE OR INSERT INTO Cows (Name, Number, Location)
VALUES ('Suzy Creamcheese', 3278823, 'Green Pastures')
MATCHING (Number)