Самым важным для меня является появление UPSERT. Вот уж чего не хватало простому программисткому народу.
Итак от к слов к делу
Код инсерта показан на примере таблицы users (uid, name).
Рабочий, готовый к копипасте код выглядит так:
insert into users (uid, name)
values (1987, 'Светлана')
on conflict (uid)
do update set (uid, name) = (1988, 'Елена')
А теперь небольшие пояснения:
- После on conflict ОБЯЗАТЕЛЬНО нужно добавить имена столбцов в которых отслеживается конфликт. Wildcard запись (*) не поддерживается
- Естественно, в UPDATE нужно указать что обновлять
update set (uid, name) = (1988, 'Елена')
Кстати эта запись (uid, name) = (1988, 'Елена') очень удобна когда столбцов много и нужно все их обновить. Можно просто скопипасты в блок с UPDATE вместо кучи записей вида ключ=значение, ключ2=значение2 - Так же в on conflict должны быть указаны только те столбцы для которых установлены ограничения в БД