INOYAKAIGOR

Внимание! Сайт незапланированно сломался и вскорости я его починю. Местами он уже, вроде, работает.

Как сделать UPSERT в PostgreSQL 9.5


Запись от: 2016-01-08 21:02:59

   Вчера, седьмого января вышел новый стабильный релиз PostgreSQL 9.5. Он принёс с собой несколько важных изменений с которыми можно ознакомиться по ссылке.

Самым важным для меня является появление 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 должны быть указаны только те столбцы для которых установлены ограничения в БД

Теги: postgresql базы данных tips & tricks 

Комментарии:



©Игорь InoY Звягинцев